Apache spark 未分区的大型数据集连接另一个已分区的大型数据集。结果数据集是否已分区?

Apache spark 未分区的大型数据集连接另一个已分区的大型数据集。结果数据集是否已分区?,apache-spark,Apache Spark,在Spark上,我有一个法国上市公司的企业数据集。它很大(1 Gb CSV文件),加载时没有分区 我还有另一个数据集:etablishments(这些公司的),也是一个大文件,他们在法国的一个部门有一个位置设置它们。这个部门有一个从01到98的数字,这个数字用于划分电子表格 当我执行enterprise.join(etablishments,joinKey)结果数据集是什么? -它是否存储在etablishment分区上(这样比较方便), -还是没有分割 如果我做了一个etablishments

Spark
上,我有一个法国上市公司的企业数据集。它很大(1 Gb CSV文件),加载时没有分区

我还有另一个数据集:etablishments(这些公司的),也是一个大文件,他们在法国的一个部门有一个位置设置它们。这个部门有一个从01到98的数字,这个数字用于划分电子表格

当我执行
enterprise.join(etablishments,joinKey)
结果数据集是什么?
-它是否存储在etablishment分区上(这样比较方便),
-还是没有分割

如果我做了一个
etablishments.join(企业,joinKey)
,这会是一样的吗

  • 假设数据帧、数据集而不是RDD

  • 假设从文件中读取

  • 假设没有范围分区等

  • 回答您的问题:生成的数据帧也将 以某种方式划分,这就是你的答案。怎么可能不这样呢 一般来说,分区允许并行处理 范例

    以这个简单的例子为例:

    val ds1 = df0.repartition(765)
    val ds2 = df0.repartition(765)
    sqlContext.setConf("spark.sql.shuffle.partitions", "765")
    val joined = ds1.join(ds2, ds1("time_asc") === ds2("time_asc"), "outer") 
    
    根据默认情况(如果还没有),会对联接进行哈希处理,并创建和处理765个填充或空分区。结果输出DF也有765个分区

    如果您aggr、join等未设置上述参数,则Spark 200默认值将适用,或根据Spark会话中上次设置的值

    对于较小的广播表,输出上产生的分区数将等于非广播表(较大的表)中的分区数


    希望这有帮助。

    先试试怎么样?我试过了,但我不知道如何检查。我的程序是一个运行Spark的嵌入式jar。它不是在Spark web UI上,也不是任何工具上能够显示块在哪里。请通过Spark运行。请解释一下java应用程序是本地模式下的自动可执行jar,并且没有其他Spark环境集。我运行了一个
    java-jar app.jar
    ,它确实有效。我没有办法检查这些块放在哪里。除非控制台日志中显示了这一点。