将 spark 转换为 pandas 数据框有异常:使用基于文件的收集时不支持箭头

Convert spark to pandas dataframe has Exception: arrow is not supported when using file-based collect

我正在尝试将 spark 数据帧转换为 Azure 数据块上的 pandas 数据帧。但是我收到以下错误:

异常:使用基于文件的收集时不支持箭头

我试过使用link的参考代码: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()

但是在执行此操作时出现此错误: 异常:使用基于文件的 collect

时不支持箭头

这是错误消息的完整扩展:

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

有人可以帮忙吗?

为什么不直接从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()

我终于想出了解决办法。必须更改的是集群的运行时版本。创建了一个新集群并使用它运行时版本 5.5 进行了测试,它似乎 运行 没问题。