【发布时间】:2020-06-29 20:56:21
【问题描述】:
我目前有一个 UDF,它采用一列 xml 字符串并将其解析为字典列表。然后,我想根据键值对将该字典列列表分解为其他列。
输入看起来像这样:
id type length parsed
0 1 A 144 [{'key1':'value1'},{'key1':'value2', 'key2':'value3'},...]
1 1 B 20 [{'key1':'value4'},{'key2':'value5'},...]
2 4 A 54 [{'key3':'value6'},...]
我希望输出看起来像这样:
id type length key1 key2 key3
0 1 A 144 [value1,value2] value3
1 1 B 20 value4 value5
2 4 A 54 value6
我已经能够像这样在 Pandas 中做到这一点:
s = data['parsed xml'].explode()
df_join = (pd.DataFrame(s.tolist(), index = s.index)
.stack()
.groupby(level=[0,1])
.agg(list)
.apply(lambda x: x[0] if len(x)==1 else x)
.unstack(fill_value='')
)
t = data.join(df_join, lsuffix = '_x', rsuffix = '_y')
问题是我无法在 Spark 中转换此 Pandas 代码(我无法使用 Pandas),这会给我相同的结果。
我将使用的 Spark 是 1.6.0。
【问题讨论】:
-
可以包含 spark 版本吗?
-
使用
explode函数然后在 agg 中分组collect_list -
@VamsiPrabhala Spark 1.6.0
-
@chlebek 你能举个例子吗?
标签: python dataframe apache-spark pyspark