我在Python中使用Apache Arrow和Spark已经有一段时间了,通过使用Pandas作为中介,我可以很容易地在dataframes和Arrow对象之间进行转换。
然而,最近我为了与Spark进行交互而从Python转到了Scala,在Scala (Java)中使用Arrow并不像在Python中那样直观。我的基本需求是尽快将Spark dataframe (或RDD,因为它们很容易转换)转换为Arrow对象。我最初的想法是首先转换为拼花,然后从拼花转到箭头,因为我记得Arrow可以从拼花中读取。但是,如果我错了,请纠正我,在看了一段时间的Arrow Java文档后,我找不到Parquet to Arrow函数。这个函数在Java版本中是不存在的吗?有没有其他方法可以让Spark数据帧转到Arrow对象?也许将dataframe的列转换为数组,然后再转换为箭头对象?
任何帮助都将不胜感激。谢谢
编辑:找到以下将地块模式转换为箭头模式的链接。但是它似乎没有像我所需要的那样从parquet文件中返回一个箭头对象:https://github.com/apache/parquet-mr/blob/70f28810a5547219e18ffc3465f519c454fee6e5/parquet-arrow/src/main/java/org/apache/parquet/arrow/schema/SchemaConverter.java
发布于 2017-08-11 22:37:06
在Java中还没有可用的Parquet <-> Arrow转换器作为库。您可以在Dremio (https://github.com/dremio/dremio-oss/tree/master/sabot/kernel/src/main/java/com/dremio/exec/store/parquet)中查看基于箭头的拼花转换器以获取灵感。我相信Apache Parquet项目会欢迎您为实现此功能所做的贡献。
我们已经在C++实现中为拼图开发了一个箭头读取器/写入器:https://github.com/apache/parquet-cpp/tree/master/src/parquet/arrow。嵌套数据支持还没有完成,但在接下来的6-12个月内应该会更完整(随着贡献者的增加而更快)。
发布于 2020-05-31 06:31:26
现在有了答案,箭头可以用于将Spark转换为Pandas DataFrames,或者在调用Pandas UDF时使用。请参阅SQL PySpark Pandas with Arrow文档页面。
发布于 2021-11-28 05:11:51
Spark 3.3将拥有类似于已有的mapInPandas应用程序接口调用的mapInArrow应用程序接口调用。
这是第一个添加到Python - https://github.com/apache/spark/pull/34505中的PR
到3.3版本发布时,还会有另一个类似的Spark Scala API调用。
不确定你的用例到底是什么,但这看起来可能会有帮助。
PS。请注意,此API最初是计划为开发人员级别的,因为使用Arrow一开始可能不是非常用户友好。例如,如果你在Spark/Arrow之上开发一个库,当你可以抽象出一些箭头的细微差别时,这可能是很好的。
https://stackoverflow.com/questions/45356969
复制相似问题