首先,我们在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()
还有其他方法吗?
答案 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 |
+--------+---+