Apache spark 如何将包含嵌套元素的列从其他列(withColumn)添加到数据框
我有一个PySpark数据框,看起来像Apache spark 如何将包含嵌套元素的列从其他列(withColumn)添加到数据框,apache-spark,pyspark,pyspark-sql,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"} 我已经试过了,但我不知道PySpark中的正确语法是什么,与这个问题相反,这个问题是Scala,而且这个解决方案看起来只适用于1行,我需要对数亿行执行此操作 我尝试过将df2=df.wit
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"}
我已经试过了,但我不知道PySpark中的正确语法是什么,与这个问题相反,这个问题是Scala,而且这个解决方案看起来只适用于1行,我需要对数亿行执行此操作
我尝试过将df2=df.withColumnV,structV.*,colC1.as'C1'作为一个神秘的语法错误
编辑:我不会说这个问题是重复的,因为解决我问题的用户在这里发布的解决方案没有发布在那里
如何从同一行中的其余列生成嵌套列V?在PySpark中,可以使用struct实现。你不需要别名
df.withColumn("V", struct(col("C"), col("C1"), col("C2"), col("C3"))
如果不想硬编码列名,也可以这样做
df.withColumn("V", struct(col("*"))
as是Python中的一个关键字。使用别名-colC1。别名“C1”就是你要找的吗?@pault这不是重复的,因为该页面上的解决方案不是我想要的,用户sailesh解决了我的问题。他的解决方案没有出现在那一页上。此外,我还消除了具有空值的行。空值在这里并不重要。使用此方法然后转换为JSON将无法正确处理空值。