如何本机读取羽毛/箭头文件?

Posted

技术标签:

【中文标题】如何本机读取羽毛/箭头文件?【英文标题】: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 选项卡),但我目前有点卡住了。 【参考方案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

以上是关于如何本机读取羽毛/箭头文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何原生阅读羽毛文件?

如何在 Spring Batch 中分别读取平面文件头和正文

Eclipse C++:如何在头文件和实现文件之间快速切换?

如何在空手道框架的特征文件中读取响应头值?

用C如何读取一个网页内容

java 已经获取pdf代码,如何把他pdf文件保存到本机 要求用输出流做