如何将具有嵌套元素的列从其他列(withColumn)添加到数据框

时间:2018-11-30 15:29:36

标签: apache-spark pyspark pyspark-sql

我有一个看起来像PySpark数据框

C C1 C2 C3
1 2  3  4

我想添加另一个嵌套的列,这将使数据框的该列成为json或对象,我什至不确定这是什么正确的用词。它将从同一行的其他列中获取信息

C C1 C2 C3  V
1 2  3  4   {"C:1", "C1:2", "C2:3", "C3:4"}

我尝试过How to add a nested column to a DataFrame,但是我不知道PySpark中正确的语法是什么,与这个问题相反,它是Scala,并且该解决方案看起来仅适用于1行,我需要做数亿行。

我已经尝试过df2 = df.withColumn("V", struct("V.*", col("C1").as('C1'))),但这给出了一个神秘的语法错误。

编辑:我不会说这个问题是pyspark convert row to json with nulls的重复,因为此处没有发布由用户在此处发布的解决我问题的解决方案。

如何从同一行的其余列中创建嵌套的列V

1 个答案:

答案 0 :(得分:1)

在PySpark中,您可以使用struct来实现。您不需要别名。

df.withColumn("V", struct(col("C"), col("C1"), col("C2"), col("C3"))

如果您不想对列名进行硬编码,也可以

df.withColumn("V", struct(col("*"))