为什么将spark数据帧写入拼花格式会导致读取乱序?

时间:2019-05-09 15:28:21

标签: apache-spark dataframe

我是Spark的新手,正在检查Spark UI的代码。 写入拼花格式的代码是

     df
      .write
      .option("maxRecordsPerFile", numberOfRowsPerFile)
      .mode("append")
      .partitionBy("segment_shard", "h", "created_dt", "batch")
      .parquet(s"$storagePath/")

其中segment_shard是按以下方式计算的,

def segmentSharder(segmentUid: String): String = {
    Math.abs(XxHash64Function.hash(segmentUid.getBytes(), StringType, 0L) % 100).toString
}

因此,据我了解,每个随机分区(默认为200)将按这4种类型(segment_shard(100)* h(1)* created_st(1)* batch(1))对数据进行分区,因此共有100个实木复合地板分区。然后,每个分区将单个文件写入相应的分区。我之所以这样说,是因为每个segment_shard都有200个文件。

现在,在观察了该阶段的详细分析之后,在AWS EMR UI中,我可以看到意料之外的shuffle读取和shuffle远程读取中的值(我怪我的理解)。谁能解释,为什么会这样? EMR详细信息-r4.xlarge(30 gigs,4 core)类型的主节点和从节点,50个节点。

enter image description here

enter image description here

0 个答案:

没有答案