Извлечение столбцов из неупорядоченных данных в Scala Spark - PullRequest
0 голосов
/ 25 июня 2018

Я изучаю scala-spark и хочу знать, как мы можем извлечь необходимые столбцы из неупорядоченных данных на основе имени столбца? Подробности ниже -

Входные данные: СДР [Массив [Строка]]

id=1,country=USA,age=20,name=abc
name=def,country=USA,id=2,age=30
name=ghi,id=3,age=40,country=USA

Требуемый вывод:

Name,id
abc,1
def,2
ghi,3

Любая помощь будет высоко ценится. Спасибо заранее!

1 Ответ

0 голосов
/ 25 июня 2018

Если у вас есть RDD[Array[String]], тогда вы можете получить нужные данные как

. Вы можете определить класс дела как

case class Data(Name: String, Id: Long)

. Затем проанализировать каждую строку как case class

.
val df = rdd.map( row => {
  //split the line and convert to map so you can extract the data
  val data = row.split(",").map(x => (x.split("=")(0),x.split("=")(1))).toMap
  Data(data("name"), data("id").toLong)
})

преобразовать в Dataframe и отобразить

df.toDF().show(false)

Вывод:

+----+---+
|Name|Id |
+----+---+
|abc |1  |
|def |2  |
|ghi |3  |
+----+---+

Полный код для чтения файла

case class Data(Name: String, Id: Long)

def main(args: Array[String]): Unit = {
  val spark = SparkSession.builder().appName("xyz").master("local[*]").getOrCreate()

  import spark.implicits._
  val rdd = spark.sparkContext.textFile("path to file ")

  val df = rdd.map(row => {
    val data = row.split(",").map(x => (x.split("=")(0), x.split("=")(1))).toMap
    Data(data("name"), data("id").toLong)
  })

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