在火花数据帧提取数组索引(Extracting array index in Spark Dataf

2019-10-28 13:29发布

我有一个数组类型。例如一列一个数据帧:

val df = List(("a", Array(1d,2d,3d)), ("b", Array(4d,5d,6d))).toDF("ID", "DATA")
df: org.apache.spark.sql.DataFrame = [ID: string, DATA: array<double>]

scala> df.show
+---+---------------+
| ID|           DATA|
+---+---------------+
|  a|[1.0, 2.0, 3.0]|
|  b|[4.0, 5.0, 6.0]|
+---+---------------+

我要爆炸的阵列,并且有类似指数

+---+------------------+
| ID|  DATA_INDEX| DATA|
+---+------------------+
|  a|1           | 1.0 |
|  a|2           | 2.0 |
|  a|3           | 3.0 |
|  b|1           | 4.0 |
|  b|2           | 5.0 |
|  b|3           | 6.0 |
+---+------------+-----+

我希望能够做到这一点与Scala和Sparlyr或SparkR我使用的是1.6火花

Answer 1:

火花1.6,你可以注册一个数据帧作为一个临时表中,然后运行蜂巢QL过它来获得期望的结果。

df.registerTempTable("tab")

sqlContext.sql("""
    select 
       ID, exploded.DATA_INDEX + 1 as DATA_INDEX, exploded.DATA  
    from 
       tab 
    lateral view posexplode(tab.DATA) exploded as DATA_INDEX, DATA 
""").show

+---+----------+----+
| ID|DATA_INDEX|DATA|
+---+----------+----+
|  a|         1| 1.0|
|  a|         2| 2.0|
|  a|         3| 3.0|
|  b|         1| 4.0|
|  b|         2| 5.0|
|  b|         3| 6.0|
+---+----------+----+


Answer 2:

有一个posexplode火花可用的功能功能

   import org.apache.spark.sql.functions._

   df.select("ID", posexplode($"DATA))

PS:这只是后可用2.1.0版本



文章来源: Extracting array index in Spark Dataframe