在PySpark 2上加入DataFrame时出错

时间:2018-08-27 17:58:09

标签: apache-spark pyspark pyspark-sql

我在使用Spark 2.3.1和PySpark时遇到问题。

首先,我试图做所有许多不同的操作,例如连接和列选择,最后收集它或将其保存到一个csv文件中,但火花使我感到Py4JJavaError。

我的第一个错误是:

Py4JJavaError: An error occurred while calling o482.showString.
: org.apache.spark.SparkException: Exception thrown in awaitResult: 
    at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:205)

编辑完整错误堆栈repo added to github

我尝试根据http://textuploader.com/d21se增加broadcastTimeout 但仍然无法正常工作。

所以我尝试了一个较小的手术,例如关节。我有两个大约每个50MB的DataFrame。我尝试了像这样的加入:

l.join(r, l["ir"] == r["ir"], how="outer").show()

当l和r是我的DataFrame且ir是键时。

我仍然收到类似错误

Py4JJavaError: An error occurred while calling o3584.showString.
: java.lang.IllegalArgumentException

我不太确定该怎么办以及问题出在哪里。如果有人可以帮助!

编辑:经过更多调查,当我进行连接时,似乎总列数存在问题。我尝试这样做:

l = l.selectExpr(*list(np.unique(l.columns[:-7] + ["ir"])))
l.join(r, l["ir"] == r["ir"], how="outer").show()`

l = l.selectExpr(*list(np.unique(l.columns[-7:] + ["ir"])))
l.join(r, l["ir"] == r["ir"], how="outer").show()

两者都起作用,对于不熟悉python的人,我只是在第一个表达式中选择了一个从0到-7列的子样本(-7是结束前的7)+键,然后在第二个expr中选择了从-7列结束

两个工作都意味着每个列都可以加入联接,并且它不是具有数据的pb,而是具有列数的pb。我认为这可能是一个火花配置,但不确定。

1 个答案:

答案 0 :(得分:0)

我通过降级到Java 1.8 ...解决了这个问题。我的Java版本是1.10