我在使用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。我认为这可能是一个火花配置,但不确定。
答案 0 :(得分:0)
我通过降级到Java 1.8 ...解决了这个问题。我的Java版本是1.10