2017-07-27 33 views
6

我一直在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

回答

3

沒有一個平面< - >箭轉換器可作爲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