本文介绍了在Spark Dataframe中提取数组索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有数组类型列的数据框例如:

I have a Dataframe with a Column of Array TypeFor example :

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

我希望爆炸数组并具有类似的索引

I wish to explode the array and have index like

+---+------------------+
| 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做到这一点我正在使用Spark 1.6

I wish be able to do that with scala, and Sparlyr or SparkRI'm using spark 1.6

推荐答案

使用Spark 1.6,您可以将数据帧注册为临时表,然后对其运行Hive QL,以获得所需的结果.

With Spark 1.6, you can register you dataframe as a temporary table and then run Hive QL over it to get the desired result.

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

这篇关于在Spark Dataframe中提取数组索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 05:33