как взять каждые 9 строк файла как одну запись при чтении текстового файла spark / scala RDD - PullRequest
0 голосов
/ 26 октября 2018

как мне разобрать этот файл данных в spark / scala и взять каждые 9 строк как одну запись. Мне нужно, чтобы они переписывали каждые 9 строк через запятую. проверьте это изображение для формата данных

1 Ответ

0 голосов
/ 27 октября 2018

Вот решение:

Генерация от RDD до DF и обработка, как показано ниже.

g является группой, k является ключом к номеру записи, который повторяется в пределах g. v ваш контент записи. Как-нибудь пропустить пустую запись. Я оставил ключ, вы можете раздеть его.

Ввод - это файл из 6 строк, и я использовал группы по 3. Вы можете изменить это на 9 и сделать write.df; Я сделал тяжелую работу.

Затем примените эту логику и переименуйте столбцы:

import org.apache.spark.sql.functions._
import org.apache.spark.mllib.rdd.RDDFunctions._

val dfsFilename = "/FileStore/tables/7dxa9btd1477497663691/Text_File_01-880f5.txt"
val readFileRDD = spark.sparkContext.textFile(dfsFilename)
val rdd2 = readFileRDD.sliding(3,3).zipWithIndex
val rdd3 = rdd2.map(r => (r._1.zipWithIndex, r._2))
val df = rdd3.toDF("vk","g")

val df2 = df.withColumn("vke", explode($"vk")).drop("vk")
val df3 = df2.withColumn("k", $"vke._2").withColumn("v", $"vke._1").drop("vke")

val result = df3
            .groupBy("g")
            .pivot("k")
            .agg(expr("first(v)"))

result.show()

возвращается:

+---+--------------------+--------------------+--------------------+
|  g|                   0|                   1|                   2|
+---+--------------------+--------------------+--------------------+
|  0|The quick brown f...|Here he lays I te...|Gone are the days...|
|  1|  Gosh, what to say.|Hallo, hallo, how...|          I am fine.|
+---+--------------------+--------------------+--------------------+

Вы можете использовать скольжение с 9,10.

Кроме того, существует подход:

val rdd = readFileRDD.coalesce(1).mapPartitions(_.grouped(n))

Но вы должны объединиться в 1, а некоторые обработать запись пропуска, каждую десятую. n может быть установлено в 10 и убрать последнее значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...