pandas - pyspark 的 pandas 中的 flatMap

标签 pandas pyspark

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/

相关文章:

python - 如何替换 pandas 数据框中列开头的非整数值

python - Pandas :根据另一列条件使用应用功能

python - ipython pyspark 'range' 对象没有属性 'defaultParallelism'

python - 根据 pyspark 中的条件合并 spark 中的两行

python - pyspark对角比较两列

mysql - Spark工作人员同时更新Mysql表的同一行

python-3.x - pandas:从包含列表的另一个 df 列中的一个 df 搜索列值

python - 将 Pandas Series 添加为 DataFrame 中的一行,忽略不匹配的列

python - 更改 pandastable 中显示的数据框(tkinter 小部件)

apache-spark - Spark HashingTF 的工作原理