pandas 中是否有与 flatMap 相同的操作在 pyspark 中?
平面 map 示例:
>>> rdd = sc.parallelize([2, 3, 4])
>>> sorted(rdd.flatMap(lambda x: range(1, x)).collect())
[1, 1, 1, 2, 2, 3]
到目前为止,我可以想到 apply
后跟 itertools.chain
,但我想知道是否有一个一步解决方案。
最佳答案
有一个黑客。我经常做类似的事情
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'x': [[1, 2], [3, 4, 5]]})
In [3]: df['x'].apply(pd.Series).unstack().reset_index(drop=True)
Out[3]:
0 1
1 3
2 2
3 4
4 NaN
5 5
dtype: float64
引入 NaN
是因为中间对象创建了 MultiIndex
,但对于很多事情你可以放弃它:
In [4]: df['x'].apply(pd.Series).unstack().reset_index(drop=True).dropna()
Out[4]:
0 1
1 3
2 2
3 4
5 5
dtype: float64
这个技巧使用了所有的 pandas 代码,所以我希望它相当高效,尽管它可能不喜欢大小不同的列表之类的东西。
关于pandas - pyspark 的 pandas 中的 flatMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080258/