火花 >= 2.3.0
从 Spark 2.3.0 开始,可以使用 PandasSeries
或DataFrame
按分区或组。参见例如:
火花 < 2.3.0
创建本地 PySpark 的自然方法是什么
哪有这回事。Spark 分布式数据结构不能嵌套,或者您更喜欢不能嵌套动作或转换的另一个视角。
或熊猫数据框
这相对容易,但你必须至少记住几件事:
- Pandas 和 Spark DataFrames 甚至不完全等同。这些是不同的结构,具有不同的属性,通常不能用另一种替换。
- 分区可以为空。
- 看起来你正在传递字典。请记住,基本 Python 字典是无序的(与
collections.OrderedDict
示例不同)。因此,传递列可能无法按预期工作。
import pandas as pd
rdd = sc.parallelize([
{"x": 1, "y": -1},
{"x": -3, "y": 0},
{"x": -0, "y": 4}
])
def combine(iter):
rows = list(iter)
return [pd.DataFrame(rows)] if rows else []
rdd.mapPartitions(combine).first()
## x y
## 0 1 -1