行转置来自pySpark中第二列的值

时间:2016-11-24 17:36:15

标签: python apache-spark pyspark

我有一个包含4列(C1,C2,C3和C4)的pySpark数据帧。在第三列(C3)中,我有分类值,例如V1,V2,V3,在第四列(C4)中,我有相应的数值。我想添加额外的列V1,V2和V3,其中这些新列的值应来自第4列(C4)的相应行

我可以通过UDFDF.withColumn将行转置为列,但无法显示值

def valTocat(C3):
if C3 == 'xyz':
    return 1
else:
    return 0

但以下内容无效

def valTocat((C3, C4)):
if C3 == 'xyz':
    return C4
else:
    return 0

不知怎的,我无法发布数据的表格格式,但我认为很容易想象。

一些建议将非常感谢

1 个答案:

答案 0 :(得分:2)

您可以尝试pivot() DataFrame

from pyspark.sql.functions import expr

df.groupBy("c1","c2") \
 .pivot("c3") \
 .agg(expr("coalesce(first(c4))")).show()

您需要使用coalesce函数将缺失值替换为null