Как преобразовать объект rdd в фрейм данных в Scala - PullRequest
0 голосов
/ 30 марта 2020

Я читаю данные из ElasticSearch и сохраняю в RDD.

val es_rdd = sc.esRDD("indexname/typename",query="?q=*")

На диске есть данные следующего примера:

(uniqueId,Map(field -> value))
(uniqueId2,Map(field2 -> value2))

Как я могу преобразовать этот RDD (String, Map к кадру данных (строка, строка, строка)?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Я читал напрямую в формате Spark. SQL, используя следующий вызов elasti c:

val df = spark.read.format("org.elasticsearch.spark.sql")
      .option("query", "?q=*")
      .option("pushdown", "true")
      .load("indexname/typename")
0 голосов
/ 30 марта 2020

Вы можете использовать explode для достижения этого.

  import spark.implicits._
  import org.apache.spark.sql.functions._

  val rdd = sc.range(1, 10).map(s => (s, Map(s -> s)))
  val ds = spark.createDataset(rdd)
  val df = ds.toDF()
  df.printSchema()
  df.show()

  df.select('_1,explode('_2)).show()

вывод:

root
 |-- _1: long (nullable = false)
 |-- _2: map (nullable = true)
 |    |-- key: long
 |    |-- value: long (valueContainsNull = false)

+---+--------+
| _1|      _2|
+---+--------+
|  1|[1 -> 1]|
|  2|[2 -> 2]|
|  3|[3 -> 3]|
|  4|[4 -> 4]|
|  5|[5 -> 5]|
|  6|[6 -> 6]|
|  7|[7 -> 7]|
|  8|[8 -> 8]|
|  9|[9 -> 9]|
+---+--------+

+---+---+-----+
| _1|key|value|
+---+---+-----+
|  1|  1|    1|
|  2|  2|    2|
|  3|  3|    3|
|  4|  4|    4|
|  5|  5|    5|
|  6|  6|    6|
|  7|  7|    7|
|  8|  8|    8|
|  9|  9|    9|
+---+---+-----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...