将元素添加到spark数据帧中的现有结构

时间:2017-03-18 03:02:00

标签: apache-spark pyspark spark-dataframe apache-spark-dataset

我有一个pyspark数据框,架构看起来像这样。

root
|-- useragent: string (nullable = true)
|-- properties: struct (nullable = true)
|    |-- browser: string (nullable = true)
|    |-- device: string (nullable = true)

我正在使用udf + withColumn从useragent中提取更多信息。但我只能在新列中存储我正在创建的任何其他属性。有没有办法可以将它附加到结构本身?

我已经更改了架构,但它并没有从已经存在的其他属性传输我需要的所有数据

df = df.schema['properties'].dataType.add(StructField('type', StringType()))

将此转换为RDD会更有意义吗?

1 个答案:

答案 0 :(得分:0)

您不会使用这段代码获取任何数据,因为您没有选择任何数据。 您在此操作中所做的只是访问Schema属性,以某种方式修改它并将其分配给变量df(这不是您期望的修改后的数据帧),而只是一个StructType对象(那里似乎有一些语法错误,请检查)

您应该做的是通过select和合适的转换函数修改数据框。您可以考虑使用所需结构创建类型为StructField的新列,并使用withColumn函数将其添加为新列