Pyspark Spark:如何根据不同的列生成新列的值

Pyspark Spark:如何根据不同的列生成新列的值,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,Spark 2.2.1 皮斯帕克 df=sqlContext.createDataFrame([ (“狗”、“1”、“2”、“3”), (“第四类”、“第五类”、“第六类”), (“狗”、“7”、“8”、“9”), (“第10类”、“第11类”、“第12类”), (“狗”、“13”、“14”、“15”), (“鹦鹉”、“16”、“17”、“18”), (“金鱼”、“19”、“20”、“21”), ],[“宠物”、“狗30”、“猫30”、“鹦鹉30”]) 然后我在上面的“宠物”栏中列出了我关心的

Spark 2.2.1 皮斯帕克

df=sqlContext.createDataFrame([
(“狗”、“1”、“2”、“3”),
(“第四类”、“第五类”、“第六类”),
(“狗”、“7”、“8”、“9”),
(“第10类”、“第11类”、“第12类”),
(“狗”、“13”、“14”、“15”),
(“鹦鹉”、“16”、“17”、“18”),
(“金鱼”、“19”、“20”、“21”),
],[“宠物”、“狗30”、“猫30”、“鹦鹉30”])
然后我在上面的“宠物”栏中列出了我关心的字段列表

dfvalues=[“狗”、“猫”、“鹦鹉”]
我想写代码,它会给我来自
dog_30
cat_30
parrot_30
的值,对应于“pet”中的值。例如,在第一行中,
pet
列的值为
dog
,因此我们取
dog_30
的值为1

我尝试使用它来获取代码,但它只为列
stats
提供空值。我还没有弄明白如何处理金鱼案。我想将其设置为0

mycols=[F.when(F.col(“pet”)==p+“_30”,p)表示dfvalue中的p]
df=df.withColumn(“newCol2”,F.coalesce(*stats))
df.show()
期望输出:

+--------+------+------+---------+------+
|宠物|狗|猫|鹦鹉| 30 |统计|
+--------+------+------+---------+------+
|狗| 1 | 2 | 3 | 1|
|第4类| 5类| 6类| 5类|
|狗| 7 | 8 | 9 | 7|
|猫| 10 | 11 | 12 | 11|
|狗| 13 | 14 | 15 | 13|
|鹦鹉| 16 | 17 | 18 | 18|
|金鱼| 19 | 20 | 21 | 0|
+--------+------+------+---------+------+

逻辑关闭;您需要
。当(F.col(“pet”)==p,F.col(p+''u 30'))

mycols=[F.when(F.col(“pet”)==p,F.col(p+''u 30'))表示dfvalue中的p]
df=df.withColumn(“newCol2”,F.coalesce(F.coalesce(*mycols),F.lit(0)))
df.show()
+--------+------+------+---------+-------+
|宠物|狗|猫|鹦鹉|新科2|
+--------+------+------+---------+-------+
|狗| 1 | 2 | 3 | 1|
|第4类| 5类| 6类| 5类|
|狗| 7 | 8 | 9 | 7|
|猫| 10 | 11 | 12 | 11|
|狗| 13 | 14 | 15 | 13|
|鹦鹉| 16 | 17 | 18 | 18|
|金鱼| 19 | 20 | 21 | 0|
+--------+------+------+---------+-------+

逻辑关闭;您需要
。当(F.col(“pet”)==p,F.col(p+''u 30'))

mycols=[F.when(F.col(“pet”)==p,F.col(p+''u 30'))表示dfvalue中的p]
df=df.withColumn(“newCol2”,F.coalesce(F.coalesce(*mycols),F.lit(0)))
df.show()
+--------+------+------+---------+-------+
|宠物|狗|猫|鹦鹉|新科2|
+--------+------+------+---------+-------+
|狗| 1 | 2 | 3 | 1|
|第4类| 5类| 6类| 5类|
|狗| 7 | 8 | 9 | 7|
|猫| 10 | 11 | 12 | 11|
|狗| 13 | 14 | 15 | 13|
|鹦鹉| 16 | 17 | 18 | 18|
|金鱼| 19 | 20 | 21 | 0|
+--------+------+------+---------+-------+