spark преобразует столбец информационного кадра из имени в идентификатор в соответствии с именем и идентификатором таблицы кустов - PullRequest
0 голосов
/ 18 сентября 2018

Во-первых, у нас есть категория таблицы улья в улье:

id  |   name
1   |   history
2   |   art

...

Затем мы читаем коллекцию книг из mongodb для искровых фреймов данных:

bookname    |      category
Europe      |      history book
Drawing     |      arts

здесь, если book.category содержит category.name, тогда мне нужно преобразовать его в id.например, ожидаемый вывод - это фрейм данных, подобный следующему:

bookname    |      category
Europe      |      1
Drawing     |      2

Внимание! Я знаю, что могу использовать rdd.map (), но проблема в том, что количество полей больше 22 на самом деле,но tuple23 не разрешен, поэтому я не могу использовать rdd.map следующим образом:

bookDf.rdd.map(f=>{
   ....
   (field1,field2,.....filed50)//illegle
}).toDF()

любым другим способом?

1 Ответ

0 голосов
/ 18 сентября 2018

Может быть сделано с определенным соединением:

val categoriesDF = List(
  (1, "history"),
  (2, "art")).toDF("id", "name")
val booksDF = List(
  ("Europe", "history book"),
  ("Drawing", "arts")).toDF("bookname", "category")

val joinCondition = $"category".contains($"name")
val result = booksDF.join(categoriesDF, joinCondition)

result.select("bookname","id").show(false)

Выход:

+--------+---+
|bookname|id |
+--------+---+
|Europe  |1  |
|Drawing |2  |
+--------+---+
...