C. *_*rry 3 loops python-2.7 apache-spark pyspark
我有一个用于创建列名的字符串列表。此列表是动态的,可能会随着时间而变化。根据字符串的值,列名称会发生变化。我目前拥有的代码示例如下:
df = df.withColumn("newCol", \
F.when(df.pet == "dog", df.dog_Column) \
.otherwise(F.when(df.pet == "cat", df.cat_Column) \
.otherwise(None))))
Run Code Online (Sandbox Code Playgroud)
我想返回列表中名称的派生列。我想做这样的事情:
dfvalues = ["dog", "cat", "parrot", "goldfish"]
df = df.withColumn("newCol", F.when(df.pet == dfvalues[0], \
F.col(dfvalues[0] + "_Column"))
Run Code Online (Sandbox Code Playgroud)
问题是我无法弄清楚如何在 Pyspark 中创建循环条件。
一种方法可能是一起选择使用列表理解了coalesce,非常相似的答案在这里。
mycols = [F.when(F.col("pet") == p, F.col(p + "_Column")) for p in dfvalues]
df = df.select("*", F.coalesce(*mycols).alias("newCol"))
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为如果是 nowhen()将返回,并将选择第一个非空列。Noneotherwise()coalesce()
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |