【问题标题】:How to read feather/arrow file natively?如何本机读取羽毛/箭头文件?
【发布时间】:2019-05-03 07:41:06
【问题描述】:

我有 feather 格式文件 sales.feather,用于在 python 和 R 之间交换数据。

在 R 中,我使用以下命令:

df = arrow::read_feather("sales.feather", as_data_frame=TRUE)

在python中我使用了那个:

df = pandas.read_feather("sales.feather")

将数据从该文件加载到内存到从pyspark 操作的 Spark 实例中的最佳方法是什么? 我还想控制pyspark.StorageLevel 从羽毛中读取数据。

我不想使用 pandas 加载数据,因为它会为我的 19GB 羽化文件(从 45GB csv 创建)造成段错误。

【问题讨论】:

  • 是否需要直接加载到内存中,还是允许在加载到spark之前将其存储到hive中?
  • @cronoik 直接加载到内存中,或者最终使用 StorageLevel 选项直接从 spark 中映射箭头文件。中间没有蜂巢。
  • 您能否尝试以下操作:import pyarrow.feather as featherdf = spark.createDataframe(feather.read_feather('sales.feather'))。如果这不起作用,您能否告诉我们您的文件有多少列以及是否有索引列(类似于主键)?
  • @cronoik 如果预计会起作用,那么您应该将其发布为答案。会尝试。 9 列,无索引。
  • 我实际上不确定这是否也会导致段错误。我目前没有可以崩溃的基础设施。正确的方法是在 jvm 站点上编写自定义 converter(检查 python 选项卡),但我目前有点卡住了。

标签: apache-spark pyspark pyarrow apache-arrow feather


【解决方案1】:

您可以按如下方式将 pandas 数据帧转换为 Spark 数据帧。

from pyspark.sql import SQLContext, Row
sqlContext = SQLContext(sc)
spark_df = sqlContext.createDataFrame(pandas_df)

【讨论】:

  • 由于内存效率低下,即使在 120GB 内存机器上,此解决方案也因内存不足错误而失败,这就是为什么我要求直接读取 spark 的方式。
【解决方案2】:

也许您可以考虑改用镶木地板格式?看起来更适合您的用例,请参阅What are the differences between feather and parquet?

【讨论】:

  • 这应该是评论而不是答案
【解决方案3】:

从 pyspark 导入 SparkContext

sc = SparkContext("local", "App Name")
sql = SQLContext(sc)

然后使用 createDataFrame 如下:

spark_df = sql.createDataFrame(pandas_df)

【讨论】:

  • 什么是data_org
猜你喜欢
  • 2021-06-12
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 2018-08-22
  • 2017-01-24
  • 1970-01-01
相关资源
最近更新 更多