将 spark 转换为 pandas 数据框有异常:使用基于文件的收集时不支持箭头
Posted
技术标签:
【中文标题】将 spark 转换为 pandas 数据框有异常:使用基于文件的收集时不支持箭头【英文标题】:Convert spark to pandas dataframe has Exception: arrow is not supported when using file-based collect 【发布时间】:2019-08-26 18:00:01 【问题描述】:我正在尝试在 Azure 数据块上将 spark 数据帧转换为 pandas 数据帧。但我收到以下错误:
例外:使用基于文件的收集时不支持箭头
我已经尝试使用链接的参考代码:https://docs.databricks.com/spark/latest/spark-sql/spark-pandas.html
首先我使用以下行读取 csv 文件:
#read file
df1 = spark.read.csv('/mnt/test/sample.csv', header = True)
接下来我尝试使用以下代码将其转换为 pandas 数据帧:
# Enable Arrow-based columnar data transfers
spark.conf.set("spark.sql.execution.arrow.enabled", "true")
# Convert the Spark DataFrame to a Pandas DataFrame
pandas_df = df1.select("*").toPandas()
但是在这样做的时候我得到了这个错误: 例外:使用基于文件的收集时不支持箭头
这是错误信息的完整扩展:
Exception: arrow is not supported when using file-based collect
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<command-3700677352136413> in <module>()
2 spark.conf.set("spark.sql.execution.arrow.enabled", "true")
3 # Convert the Spark DataFrame to a Pandas DataFrame
----> 4 pandas_df = df1.select("*").toPandas()
/databricks/spark/python/pyspark/sql/dataframe.py in toPandas(self)
2169 _check_dataframe_localize_timestamps
2170 import pyarrow
-> 2171 batches = self._collectAsArrow()
2172 if len(batches) > 0:
2173 table = pyarrow.Table.from_batches(batches)
/databricks/spark/python/pyspark/sql/dataframe.py in _collectAsArrow(self)
2225 """
2226 if self._sc._conf.get(self._sc._jvm.PythonSecurityUtils.USE_FILE_BASED_COLLECT()):
-> 2227 raise Exception("arrow is not supported when using file-based collect")
2228 with SCCallSiteSync(self._sc) as css:
2229 sock_info = self._jdf.collectAsArrowToPython()
Exception: arrow is not supported when using file-based collect
有人可以帮忙吗?
【问题讨论】:
【参考方案1】:我终于找到了解决办法。必须更改的是集群的运行时版本。创建了一个新集群并用它运行时版本 5.5 进行了测试,它似乎运行良好。
【讨论】:
【参考方案2】:为什么不直接从dbfs
的挂载路径中使用pandas
读取csv文件呢?比如我按照下面的代码和图做的。
pdf = pd.read_csv('/dbfs/mnt/test/test.csv')
我在 Azure Databricks 上成功运行了下面的代码,没有任何错误。
pdf = pd.read_csv('/dbfs/mnt/test/test.csv')
spark.conf.set("spark.sql.execution.arrow.enabled", "true")
df1 = spark.createDataFrame(pdf)
pandas_df = df1.select("*").toPandas()
【讨论】:
以上是关于将 spark 转换为 pandas 数据框有异常:使用基于文件的收集时不支持箭头的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Spark 数据帧转换为 Pandas 并返回 Kedro?
将 Pandas 数据帧转换为 Spark 数据帧的 TypeError
如何将 scala spark.sql.dataFrame 转换为 Pandas 数据框
将 spark 数据帧转换为 pandas 数据帧 - ImportError: Pandas >= 0.19.2 must be installed