使用 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")
我正在尝试通过计算 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")