hadoop - Spark 中的part-r-xxxxx 文件

标签 hadoop apache-spark

如果我使用 Spark 将数据写入 S3(或 HDFS),我会得到一堆部分文件

part-r-xxxxx-uuid.snappy.parquet

我知道 xxxxx 是一个映射/归约任务编号,通常从零开始向上计数。

是否存在任何有效的、非错误的情况,其中将有part-r-00001输出文件但没有part-r-00000输出文件?或者有part-r-00002输出文件但没有part-r-00001文件?

我有一个 Spark 作业,它对 S3/HDFS 目录进行多次追加写入。我可以看到两个part-r-00002 文件,但只能看到一个part-r-00001 文件。这是否意味着有错误?或者这可能是一个完全有效的场景吗?

一种猜测是数据可能被分区到0,1,2个worker,其中一些分区可能没有数据,并且没有生成相应的输出文件。这是真的吗?

编辑:这是一个具体示例。请注意索引号如何变为 0、1、31、32。此 S3 目录是否列出了错误的证据?有证据表明这是一个错误吗?

2016-10-28 14:22:14    6521048 part-r-00000-a597e173-4e27-4c1a-88c2-2b02150b07fe.avro
2016-10-28 14:16:39 2486221729 part-r-00001-a597e173-4e27-4c1a-88c2-2b02150b07fe.avro
2016-10-28 16:39:24    7044366 part-r-00031-a597e173-4e27-4c1a-88c2-2b02150b07fe.avro
2016-10-28 16:33:50 2460258711 part-r-00032-a597e173-4e27-4c1a-88c2-2b02150b07fe.avro

最佳答案

Spark 通常会为每个任务生成一个 part-r-${taskIndex} 文件,无论该任务是否包含空迭代器。

Spark 完成写入后会触及一个名为 _SUCCESS 的文件。如果该文件不存在,则写入步骤中出现问题。此文件与 part-r-xxxxx 文件位于同一目录中。

编辑:我没有意识到您正在使用write.partitionBy。我刚刚自己测试过:

scala> case class MyData(key: String, value: String)
scala> sc.parallelize(Range(0, 100000)).map(x => MyData((x / 1000).toString, "foo"))
scala> res0.toDF().write.partitionBy("key").parquet("file:///.../pqt_test")

当我研究该结构时,我得到了像您一样按键分隔的任务文件:

pqt_test/key=87/part-r-00228-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=87/part-r-00227-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=87/part-r-00226-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=78/part-r-00203-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=78/part-r-00205-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=78/part-r-00202-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=78/part-r-00204-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=71/part-r-00184-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=71/part-r-00187-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=71/part-r-00185-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=71/part-r-00186-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=40/part-r-00105-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=40/part-r-00104-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=40/part-r-00106-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=33/part-r-00085-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=33/part-r-00088-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=33/part-r-00086-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=33/part-r-00087-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=65/part-r-00169-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=65/part-r-00170-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=65/part-r-00171-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=12/part-r-00033-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=12/part-r-00032-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=12/part-r-00031-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=19/part-r-00051-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=19/part-r-00050-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=19/part-r-00049-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=39/part-r-00103-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=39/part-r-00102-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=39/part-r-00101-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=58/part-r-00153-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=58/part-r-00152-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=58/part-r-00150-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
pqt_test/key=58/part-r-00151-5c1a24f5-09cb-4faf-99a6-eeb568cd9018.gz.parquet
...

结论:这很好。只要您在 key=... 文件夹所在的目录中有一个 _SUCCESS 文件,您的写入就成功了。

关于hadoop - Spark 中的part-r-xxxxx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40392461/

相关文章:

java.lang.IllegalArgumentException : There is no queue named default 异常

hadoop - 主节点在数据节点上运行是否正确?

amazon-web-services - 完成写入 S3 后,EMR 上的 Spark 步骤只是挂起为 "Running"

apache-spark - 如何使用ojdbc14.jar在spark-sql-2.4.1v中将日期/时间戳作为lowerBound/upperBound传递?

scala - 如何使用Scala在Spark 2.1中将以毫秒为单位的字符串列转换为以毫秒为单位的时间戳?

hadoop - 使用过滤器从Pig脚本产生单个输出

Maven - 测试中的不同依赖版本

hadoop - WARN util.NativeCodeLoader : Unable to load native-hadoop library for your platform. .. 在适用于 mac 的情况下使用内置 java 类

apache-spark - 将 DataFrame 写入 HDFS,连接被拒绝

scala - 使用 pyspark 读取 csv 文件时获取格式错误记录的列名称