如何本机读取羽毛/箭头文件?
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 feather
df = 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 中分别读取平面文件头和正文