使用 Spark 程序将数据拆分为好行和坏行并写入输出文件

To split data into good and bad rows and write to output file using Spark program

我正在尝试通过计算 TSV.gz 文件中分隔符的数量来过滤好行和坏行,并写入 HDFS 中的单独文件

I 运行 spark-shell

中的以下命令
Spark Version: 1.6.3

val file = sc.textFile("/abc/abc.tsv.gz")

val data = file.map(line => line.split("\t"))

var good = data.filter(a => a.size == 995)

val bad = data.filter(a => a.size < 995)

当我检查第一条记录时,可以在 spark 中看到该值 shell

good.first()

但是当我尝试写入输出文件时,我看到了以下记录,

good.saveAsTextFile(good.tsv)

HDFS 中的输出(前 2 行):

[Ljava.lang.String;@1287b635
[Ljava.lang.String;@2ef89922

你能告诉我如何在 HDFS 中获取所需的输出文件吗

谢谢!

您最终的 RDD 类型为 org.apache.spark.rdd.RDD[Array[String]]。这导致在写入操作中写入对象而不是字符串值。

您应该在保存之前再次将字符串数组转换为制表符分隔的字符串值。试一试;

good.map(item => item.mkString("\t")).saveAsTextFile("goodFile.tsv")