【问题标题】:Spark dataframe to arrowSpark数据框到箭头
【发布时间】:2018-01-03 13:09:10
【问题描述】:

我在 Python 中使用 Apache Arrow 和 Spark 已经有一段时间了,并且通过使用 Pandas 作为中介,我能够轻松地在数据帧和 Arrow 对象之间进行转换。

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

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

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

【问题讨论】:

标签: scala apache-spark dataframe apache-arrow


【解决方案1】:

目前还没有 Parquet 箭头转换器可用作 Java 中的库。您可以查看 Dremio (https://github.com/dremio/dremio-oss/tree/master/sabot/kernel/src/main/java/com/dremio/exec/store/parquet) 中基于 Arrow 的 Parquet 转换器以获得灵感。我相信 Apache Parquet 项目会欢迎您为实现此功能做出贡献。

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

【讨论】:

【解决方案2】:

现在有了答案,Arrow 可用于将 Spark DataFrames 转换为 Pandas DataFrames 或在调用 Pandas UDF 时。请参阅SQL PySpark Pandas with Arrow 文档页面。

【讨论】:

    【解决方案3】:

    Spark 3.3 将具有 mapInArrow API 调用,类似于现有的 mapInPandas API 调用。

    这是第一个将它添加到 Python 的 PR - https://github.com/apache/spark/pull/34505

    到 3.3 版本时,还会有另一个类似的 Spark Scala API 调用。

    不确定您的用例到底是什么,但这似乎可能会有所帮助。

    PS。请注意,最初此 API 计划为开发人员级别,因为起初使用 Arrow 可能对用户不太友好。如果您正在 Spark/Arrow 之上开发一个库,这可能会很棒,例如,当您可以抽象出其中一些 Arrow 细微差别时。

    【讨论】:

      【解决方案4】:

      Apache Arrow 是一个跨语言开发平台,支持内存中的列式数据结构。由于它是跨语言平台,因此有助于使用 Python、Java、C、C++、C#、Go、R、Ruby、JavaScript、MATLAB、Rust 等不同的编程语言进行编写。

      因为它支持 Java,它也支持 Scala 语言,因为它们都运行在 jvm 之上。但是要想拥有Scala的功能来将Scala对象转换为Arrow Objects,它必须通过python,因为Arrow是用python编写的,并且它广泛支持python。

      最终,Python 与 Scala 对话,并为它带来了随时可用的 jvm 属性。

      请通过以下链接查看详细说明: https://databricks.com/session/accelerating-tensorflow-with-apache-arrow-on-spark-bonus-making-it-available-in-scala

      【讨论】:

      • Arrow 确实广泛支持 Python,但它主要是用 C++ 编写的。
      猜你喜欢
      • 2019-02-14
      • 2015-05-04
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2017-05-20
      • 1970-01-01
      • 2013-04-17
      相关资源
      最近更新 更多