当我将 pyarrow 设置为 true 时,我们使用 spark 会话,但是当我运行 toPandas() 时,它会抛出错误:
"toPandas attempted Arrow optimization because 'spark.sql.execution.arrow.enabled' is set to true. Please set it to false to disable this"
我可以知道为什么会这样吗?
默认情况下 PyArrow 被禁用,但在您的情况下它似乎已启用,您必须从当前的 spark 应用程序会话或从 Spark 配置文件永久禁用此配置。
如果您想为所有 Spark 会话禁用此功能,请在 SPARK_HOME/conf/spark-defaults .conf 中将以下行添加到您的 Spark 配置中。
spark.sql.execution.arrow.enabled=false
但如果您在 spark 应用程序中使用 pandas,我建议使用 PyArrow,它将加快 spark 和 pandas 之间的数据转换。
有关 PyArrow 的更多信息,请访问我的博客。
我在 Pyarrow 上遇到了同样的问题。
我的环境:
当我尝试像这样启用 Pyarrow 优化时:
spark.conf.set('spark.sql.execution.arrow.enabled', 'true)
我收到以下警告:
createDataFrame attempted Arrow optimization because 'spark.sql.execution.arrow.enabled' is set to true; however failed by the reason below: TypeError: 'JavaPackage' object is not callable
我通过以下方式解决了这个问题:
import os
from pyspark import SparkConf
spark_config = SparkConf().getAll()
for conf in spark_config:
print(conf)
这将打印火花配置的键值对。
('spark.yarn.jars', 'path\to\jar\files')
jar_names = os.listdir('path\to\jar\files')
for jar_name in jar_names:
if 'arrow' in jar_name:
print(jar_name)
找到以下罐子:
arrow-format-0.10.0.jar
arrow-memory-0.10.0.jar
arrow-vector-0.10.0.jar
spark.conf.set('spark.driver.extraClassPath', 'path\to\jar\files\arrow-format-0.10.0.jar:path\to\jar\files\arrow-memory-0.10.0.jar:path\to\jar\files\arrow-vector-0.10.0.jar')