【发布时间】:2020-12-25 21:39:44
【问题描述】:
我有一个 PySpark 数据框,其中有一列包含一个字符串类型的 StructField,它具有一个动态长度列表。
df.schema: StructType(List(StructField(id,StringType,true),StructField(recs,StringType,true)))
|id | recs |
|ABC|[66, [["AB", 10]]]
|XYZ|[66, [["XY", 10], ["YZ", 20]]]
|DEF|[66, [["DE", 10], ["EF", 20], ["FG", 30]]]
我正在尝试将列表扁平化为这样的内容
|id | like_id
|ABC|AB|
|XYZ|XY|
|XYZ|YZ|
|DEF|DE|
|DEF|EF|
|DEF|FG|
我做了什么:
我尝试使用数组表达式,它给我一个错误,因为 recs 是 StringType 的预期
我可以在 pandas 中使用 json 加载和 itertools 来处理这个问题,但我需要在 spark 中进行这个处理,因为数据帧很大,大约 3000 万,结果将是 10 倍。
df["recs"].apply(
lambda x: [rec_id[0] for rec_id in json.loads(x)[1:][0]]
)
for i, row in df.iterrows():
....
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql