如何在hive和spark中解决此查询?

时间:2018-01-09 09:05:47

标签: apache-spark hive

编写一个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

及以上场景解决火花和显示与上述输出相同

1 个答案:

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