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

时间:2019-02-07 07:17:43

标签: scala apache-spark apache-spark-sql scala-collections

我试图通过计算TSV.gz文件中定界符的数量来过滤好行和坏行,并写入HDFS中的单独文件

我在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)

当我检查第一条记录时,可以在火花壳中看到该值

good.first()

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

good.saveAsTextFile(good.tsv)

HDFS中的输出(前2行):

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

请让我知道如何在HDFS中获取所需的输出文件

谢谢!!

1 个答案:

答案 0 :(得分:3)

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

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

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