Spark数据框到箭头

问题描述:

我一直在Python中使用带有Spark的Apache Arrow,并且已经很容易地使用Pandas作为中介,在数据框和箭头对象之间进行转换。但是,最近,我已经从Python转移到Scala来与Spark进行交互,并且在Scala(Java)中使用Arrow并不像在Python中那样直观。我的基本需求是尽可能快地将Spark数据框(或RDD,因为它们很容易转换)转换为Arrow对象。我最初的想法是首先转换为Parquet,然后从Parquet转到Arrow,因为我记得麻雀可以从Parquet中读取。但是,如果我错了,请纠正我,在查看Arrow Java文档一段时间后,我找不到Parquet to Arrow功能。这个函数在Java版本中不存在吗?是否有另一种方法来获得一个箭头对象的Spark数据框?也许将数据框的列转换为数组然后转换为箭头对象?Spark数据框到箭头

任何帮助将不胜感激。谢谢

编辑:找到以下链接将镶木地板模式转换为箭头模式。但它似乎并没有从地板文件返回一个箭头对象,正如我需要: https://github.com/apache/parquet-mr/blob/70f28810a5547219e18ffc3465f519c454fee6e5/parquet-arrow/src/main/java/org/apache/parquet/arrow/schema/SchemaConverter.java

+0

Wes McKinney是最好的人之一[恕我直言]回答这个问题。我啾啾他(https://twitter.com/gstaubli/status/895763929653157888)希望得到回应。手指交叉。 – Garren

没有一个平面< - >箭转换器可作为Java中的库呢。您可以看看Dremio的Arrow-based Parquet转换器(https://github.com/dremio/dremio-oss/tree/master/sabot/kernel/src/main/java/com/dremio/exec/store/parquet)以获取灵感。我确信Apache Parquet项目会欢迎您实现此功能的贡献。

我们已经在C++实现中开发了Parquet的Arrow读写器:https://github.com/apache/parquet-cpp/tree/master/src/parquet/arrow。嵌套数据支持尚未完成,但在接下来的6-12个月内应该会更完整(随着贡献者的加强,它会更快)。

+0

对不起这个问题,但试图理解Java实现如何获得'Apache Arrow'的性能优势。看看https://github.com/apache/arrow/tree/master/java/memory/src/main/java/org/apache/arrow/memory和https://github.com/apache/arrow/tree/ master/cpp/src/arrow/python让我觉得'arrow-cpp'严格适用于Python,不能与Java/JVM一起使用。这是否正确,韦斯? – SemanticBeeng