我试图通过计算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中获取所需的输出文件
谢谢!!
答案 0 :(得分:3)
您最终的RDD是org.apache.spark.rdd.RDD[Array[String]]
类型。导致在写操作中写对象而不是字符串值。
保存之前,应再次将字符串数组转换为制表符分隔的字符串值。试一试;
good.map(item => item.mkString("\t")).saveAsTextFile("goodFile.tsv")