pyspark启用pyarrow时报错:local_connect_and_auth() takes 2 positional arguments but 3 was given

启用pyarrow可以加快pyspark与pandas的数据传输效率。

代码&错误信息:

如下代码会报错:

# spark初始化
spark = SparkSession \
        .builder.master("local") \
        .appName("IForestExample") \
        .config("spark.sql.execution.arrow.enabled", "true")\
        .getOrCreate()


pdf = pd.DataFrame(np.random.rand(100000, 3))
# pdf -> sdf
%time df = spark.createDataFrame(pdf)
# sdf -> pdf
%time result_pdf = df.select('*').toPandas()

错误如下:

版本信息:

pyspark=2.4.3

pyarrow=0.13.0

 

Trouble shoting:

跟踪了一下代码,发现sock_info由三个值组成,但是local_connect_and_auth只接受两个参数

网上的参考资料:https://github.com/apache/spark/pull/24834

sock_info包含了三个值:port, auth_secret, server,但是大部分应用都只需要前两个。

所以可以修改/usr/local/lib/python3.6/dist-packages/pyspark/rdd.py如下:

从sock_info里取出前两个值,作为local_connect_and_auth里作为参数。可以运行了。

效果对比

不使用pyarrow:

 

使用pyarrow:

从pandas df 到spark df效率提升了50倍,从spark df到pandas df效率提升了10倍左右。

 

mmlspark中的docker不用修改直接运行也正常

从mmlspark直接来下来的docker mcr.microsoft.com/mmlspark/release, 不用修改rdd.py直接运行没问题。

且pyspark和pyarrow的版本也是2.4.3和0.13。不知道原因。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值