【问题标题】:pyarrow error: toPandas attempted Arrow optimizationpyarrow 错误:toPandas 尝试了箭头优化
【发布时间】:2019-02-02 16:44:45
【问题描述】:

当我将 pyarrow 设置为 true 时,我们使用 spark session,但是当我运行 toPandas() 时,它会抛出错误:

"toPandas attempted Arrow optimization because 'spark.sql.execution.arrow.enabled' is set to true. Please set it to false to disable this"

我可以知道为什么会这样吗?

【问题讨论】:

标签: pyspark pyarrow


【解决方案1】:

默认情况下 PyArrow 是禁用的,但在您的情况下它似乎已启用,您必须从当前的 spark 应用程序会话或从 Spark 配置文件永久禁用此配置。

如果您想为所有 Spark 会话禁用此功能,请在 SPARK_HOME/conf/spark-defaults .conf 中将以下行添加到您的 Spark 配置中。 spark.sql.execution.arrow.enabled=false

但如果您在 spark 应用程序中使用 pandas,我建议使用 PyArrow,它将加快 spark 和 pandas 之间的数据转换。

有关 PyArrow 的更多信息,请访问我的blog

【讨论】:

    【解决方案2】:

    我在使用 Pyarrow 时遇到了同样的问题。

    我的环境:

    • Python 3.6
    • Pyspark 2.4.4
    • 派罗 4.0.1
    • Jupyter 笔记本
    • GCS 上的 Spark 集群

    当我尝试像这样启用 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

    我通过以下方式解决了这个问题:

    1. 打印了 spark session 的配置:
    import  os
    from pyspark import SparkConf
    
    spark_config = SparkConf().getAll()
    for conf in spark_config:
        print(conf)
    

    这将打印火花配置的键值对。

    1. 在这个键值对中找到了我的 jar 文件的路径:

    ('spark.yarn.jars', 'path\to\jar\files')

    1. 找到我的 jar 文件所在的路径后,我为 Pyarrow 打印了 jar 的名称,如下所示:
    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
    
    1. 然后在 spark 会话配置中添加箭头 jar 的路径: 要添加多个 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')

    1. 然后重启内核,Pyarrow 优化工作了

    【讨论】:

    • spark.conf.set('spark.sql.execution.arrow.enabled', 'true) 在集群模式下可能不工作,--conf spark.sql.execution.arrow.enabled=true 工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2020-11-05
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多