意思是有一个熊猫数据框,我在pyarrow的帮助下将其转换为火花。
pyarrow.Table.fromPandas
是您要寻找的功能:
Table.from_pandas(type cls, df, bool timestamps_to_ms=False, Schemaschema=None, bool preserve_index=True)
Convert pandas.Dataframe to an Arrow Table
import pyarrow as papdf = ... # type: pandas.core.frame.Dataframeadf = pa.Table.from_pandas(pdf) # type: pyarrow.lib.Table
结果可以直接写入Parquet / HDFS,而无需通过Spark传递数据:
import pyarrow.parquet as pqfs = pa.hdfs.connect()with fs.open(path, "wb") as fw pq.write_table(adf, fw)
笔记 :
此外,由于
createDataframe(SPARK-20791-使用Apache Arrow从Pandas.Dataframe改进Spark
createDataframe)直接支持Spark
2.3(当前主版本)Arrow
。它用于
SparkContext.defaultParallelism计算块数,因此您可以轻松控制单个批次的大小。
最后,
defaultParallelism可用于控制使用标准生成的分区的数量,从而
_convert_from_pandas有效地将片的大小减小到更易于管理的程度。
不幸的是,这些不太可能解决您当前的内存问题。两者都依赖
parallelize,因此将所有数据存储在驱动程序节点的内存中。切换到箭头或调整配置只能加快过程或地址块大小的限制。
实际上,只要您使用本地熊猫
Dataframe作为输入,我看不出有任何理由在这里切换到Spark 。在这种情况下,最严重的瓶颈是驱动程序的网络I /
O,而分发数据将无法解决该问题。



