spark根据配置单元表映射名称和ID将数据框的列从名称转换为ID

时间:2018-09-18 05:57:10

标签: apache-spark dataframe hive rdd

首先,我们在hive中有一个hive表类别:

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:< / p>

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

还有其他方法吗?

1 个答案:

答案 0 :(得分:2)

可以通过特定的联接来完成:

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  |
+--------+---+