python - 数据框内部连接中的 Pyspark awaitResult 错误
问题描述
在 docker 容器内运行独立 spark-2.3.0-bin-hadoop2.7
- df1 = 5 行
- df2 = 10 行
数据集非常小。
df1 schema: Dataframe[id:bigint, name:string] df2 schema: Dataframe[id:decimal(12,0), age: int]
内部联接
df3 = df1.join(df2, df1.id == df2.id, 'inner')
df3 schema: Dataframe[id:bigint, name:string, age: int]
执行df3.show(5)
时出现以下错误
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/apache/spark-2.3.0-bin-hadoop2.7/python/pyspark/sql/dataframe.py", line 466, in collect
port = self._jdf.collectToPython() File "/usr/local/lib/python3.6/dist-packages/py4j/java_gateway.py", line 1257, in __call__
answer, self.gateway_client, self.target_id, self.name) File "/usr/apache/spark-2.3.0-bin-hadoop2.7/python/pyspark/sql/utils.py", line 63, in deco
return f(*a, **kw) File "/usr/local/lib/python3.6/dist-packages/py4j/protocol.py", line 328, in get_return_value
format(target_id, ".", name), value) py4j.protocol.Py4JJavaError: An error occurred while calling o43.collectToPython. : org.apache.spark.SparkException: Exception thrown in awaitResult:
at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:205)
at org.apache.spark.sql.execution.exchange.BroadcastExchangeExec.doExecuteBroadcast(BroadcastExchangeExec.scala:136)
根据这个建议尝试将广播超时设置为-1 ,但得到了同样的错误
conf = SparkConf().set("spark.sql.broadcastTimeout","-1")
解决方案
我在 Spark 2.3 中使用了不兼容的 JRE 版本。
在 Docker Image 中使用 openjdk-8-jre 更新 JRE 后错误得到解决
推荐阅读
- javascript - 在 Postman 中将字段添加到 json
- vue.js - V-for="项目中的项目"。在计算属性中使用“项目”
- android - 如何测试共享偏好
- ajax - 未捕获的类型错误:无法设置未定义的属性“scriptsFailed”
- linux - 连接 SSH 并与另一个用户执行脚本
- php - mPDF 5.3 - base64 时图像显示为损坏的 [x]
- c++ - cpp 文件中的 C++ 变量能否定义为特殊符号 β
- string - 从已知索引中查找子字符串的索引
- capybara - 将 site_prism 与动态加载的字段一起使用
- excel-formula - 使用分隔符“>”提取最后一个字符串 Excel