编写一个hivesql并显示如下输出
id name dob
-------------------------
1 anjan 10-16-1989
输出:
id name dob
-------------------------
1 a 10-16-1989
1 n 10-16-1989
1 j 10-16-1989
1 a 10-16-1989
1 n 10-16-1989
及以上场景解决火花和显示与上述输出相同
答案 0 :(得分:0)
假设您有一个来自Hive的数据框(将其命名为数据):
+---+-----+----------+
| id| name| dob|
+---+-----+----------+
| 1|anjan|10-16-1989|
+---+-----+----------+
您可以在spark中定义用户定义的函数,将字符串转换为数组:
val toArray = udf((name: String) => name.toArray.map(_.toString))
我们可以将它应用于名称栏:
val df = data.withColumn("name", toArray(res0("name")))
+---+---------------+----------+
| id| name| dob|
+---+---------------+----------+
| 1|[a, n, j, a, n]|10-16-1989|
+---+---------------+----------+
我们现在可以在名称栏
上使用爆炸功能df.withColumn("name", explode(df("name")))
+---+----+----------+
| id|name| dob|
+---+----+----------+
| 1| a|10-16-1989|
| 1| n|10-16-1989|
| 1| j|10-16-1989|
| 1| a|10-16-1989|
| 1| n|10-16-1989|
+---+----+----------+