我有一个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会更有意义吗?
答案 0 :(得分:0)
您不会使用这段代码获取任何数据,因为您没有选择任何数据。
您在此操作中所做的只是访问Schema
属性,以某种方式修改它并将其分配给变量df
(这不是您期望的修改后的数据帧),而只是一个StructType对象(那里似乎有一些语法错误,请检查)
您应该做的是通过select
和合适的转换函数修改数据框。您可以考虑使用所需结构创建类型为StructField
的新列,并使用withColumn
函数将其添加为新列