当前位置: 首页 > 知识库问答 >
问题:

Pyspark 等待数据帧内部联接中出现结果错误

颜霖
2023-03-14

在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")
    
  • 共有1个答案

    苏君昊
    2023-03-14

    我使用的是与Spark 2.3不兼容的JRE版本。

    在 Docker 映像中使用 openjdk-8-jre 更新 JRE 后,错误已解决

     类似资料:
    • 我有一个由180M行和4列(所有整数)组成的熊猫数据帧。我把它保存为泡菜文件,文件是5.8GB。我正在尝试使用将熊猫数据帧转换为 pyspark 数据帧,但不断收到“内存不足”错误。 错误代码段为 我有超过200GB的内存,我不认为缺少物理内存是个问题。我了解到有多种内存限制,例如驱动内存-这可能是原因吗? 我该如何解决这个问题?

    • 我有两个具有大量(几百万到几千万)行的数据帧。我想为他们牵线搭桥。 在我目前使用的BI系统中,您可以通过首先对特定键进行分区,然后在该键上进行连接来快速完成此操作。 这是我在Spark中需要遵循的模式吗,或者这并不重要?乍一看,在分区之间转移数据似乎浪费了很多时间,因为没有正确地进行预分区。 如果有必要,我该怎么做?

    • 本文向大家介绍如何在R中执行两个数据帧的内部联接和外部联接?,包括了如何在R中执行两个数据帧的内部联接和外部联接?的使用技巧和注意事项,需要的朋友参考一下 内部联接仅返回左侧表在右表中具有匹配键的行,外部联接返回两个表中的所有行,左侧联接返回在右表中具有匹配键的记录。这可以通过使用合并功能来完成。 示例 内部联接 内部联接 外连接

    • 下面是数据帧列的样子。 df1=‘设备编号’、‘日期’、。。。。 df2=‘设备编号’、‘日期’、。。。。 在每个数据帧中,设备号和日期都不是唯一的。然而,它们的组合对于识别一行是唯一的。 我试图形成一个新的数据帧,它匹配来自df1和df2的行,其中设备号和日期都相等,并且拥有来自这些df1和df2的所有列。我正在尝试的熊猫命令是 然而,df3给了我一个数据帧的形状(14000,21)。列号是有意

    • 我在pyspark有两个数据框。如下所示,df1保存来自传感器的整个long_lat。第二个数据帧df2是第一个数据帧的子集,其中lat-long值被向上舍入到2位小数,然后删除重复项以保留唯一的lat_long数据点。 DF1: df2: 因此,df2 的行数比第一个少得多。在 df2 中,我应用了一个 udf 来计算状态名称。 现在我想在 df1 中填充状态名称。由于 df2 的 lat_lo

    • 假设我有两个数据帧,具有不同级别的信息,如下所示: 我想加入df1和df2,并将“值”信息传递给df2:一天中的每一小时都将获得“日”值。 预期产出: