我正在使用熊猫和火花数据框。数据帧总是非常大(> 20 GB),标准的火花函数不足以满足这些大小。目前我正在将我的熊猫数据框转换为像这样的火花数据框:
dataframe = spark.createDataFrame(pandas_dataframe)
我进行这种转换是因为使用 spark 将数据帧写入 hdfs 非常容易:
dataframe.write.parquet(output_uri, mode="overwrite", compression="snappy")
但是对于大于 2 GB 的数据帧,转换失败。如果我将 spark 数据框转换为 pandas,我可以使用 pyarrow:
// temporary write spark dataframe to hdfs
dataframe.write.parquet(path, mode="overwrite", compression="snappy")
// open hdfs connection using pyarrow (pa)
hdfs = pa.hdfs.connect("default", 0)
// read parquet (pyarrow.parquet (pq))
parquet = pq.ParquetDataset(path_hdfs, filesystem=hdfs)
table = parquet.read(nthreads=4)
// transform table to pandas
pandas = table.to_pandas(nthreads=4)
// delete temp files
hdfs.delete(path, recursive=True)
这是从 spark 到 pandas 的快速转换,它也适用于大于 2 GB 的数据帧。我还没有找到相反的方法。意味着有一个熊猫数据框,我在 pyarrow 的帮助下将其转换为火花。问题是我真的找不到如何将 pandas 数据帧写入 hdfs。
我的熊猫版本:0.19.0