爆炸后只取第一个(或第n个)元素

时间:2016-04-25 20:40:27

标签: apache-spark apache-spark-sql spark-dataframe pyspark-sql

是否可以只在explode()函数之后取第一个元素?

+-----------------------------------------+
|dog                                      |
+-----------------------------------------+
|[[Max,Black],3]                          |
|[[Spot,White],2]                         |
|[[Michael,Yellow],1]                     |
+-----------------------------------------+

例如,在上述情况下,我们只想保留[Max,Black],[Spot,white]和[Michael,Yellow]。实际上可以丢弃每个单元格中的第二个元素(3,2和1)。

谢谢!

1 个答案:

答案 0 :(得分:1)

假设您的架构看起来像这样:

root
 |-- dog: struct (nullable = false)
 |    |-- col1: struct (nullable = false)
 |    |    |-- col1: string (nullable = false)
 |    |    |-- col2: string (nullable = false)
 |    |-- col2: integer (nullable = false)

然后你可以做到以下几点:

test.withColumn("dog", $"dog".getField("col1"))

或者,如果您想保留两列,请执行:

test.select($"dog", $"dog".getField("col1") as "dog2")