Разделить данные на хорошие и плохие строки и записать в выходной файл с помощью программы Spark - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь отфильтровать хорошие и плохие строки путем подсчета количества разделителей в файле 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 голосов
/ 07 февраля 2019

Ваш окончательный СДР типа org.apache.spark.rdd.RDD[Array[String]].Что приводит к записи объектов вместо строковых значений в операции записи.

Перед сохранением необходимо снова преобразовать массив строк в строковые значения, разделенные табуляцией.Просто попробуй;

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