我是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个节点。