scala spark:在数组类型的列中访问结构中的值(或者,访问匿名结构类型列的成员)

qnakjoqk  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(444)

我有一个Dataframe,它有一个列,它是一个结构数组,比如:

+-----+-----+------------------+---+----+
|index|state|entries           |0  |1   |
+-----+-----+------------------+---+----+
|0    |KY   |[[A, 45]]         |45 |null|
|1    |OR   |[[A, 30], [B, 10]]|30 |10  |
+-----+-----+------------------+---+----+

其中“entries”是带有两个字段“name”和“number”的结构。我希望能够在一个特定的索引中获取其中一个内部值。
我可以这样做的一个方法是:

df.withColumn(col("entries").getItem(0), "dumbName").select("dumbName.name")

不过,我希望能够对匿名列执行此操作,这样看起来更像 col("entries").getItem(0).someMagicFunction("name")

6rqinv9w

6rqinv9w1#

getItem 用作魔术功能:

df.select(col("entries").getItem(0).getItem("Name")).show()

印刷品

+---------------+
|entries[0].Name|
+---------------+
|              A|
|              A|
+---------------+

也可以使用 element_at 从functions对象(从2.4.0开始提供):

df.select(element_at('entries, 1).getItem("Name")).show()

印刷品

+---------------------------+
|element_at(entries, 1).Name|
+---------------------------+
|                          A|
|                          A|
+---------------------------+

对于早期的spark版本,可以使用sql:

df.createOrReplaceGlobalTempView("df")
spark.sql("select entries[0].name from global_temp.df").show()

相关问题