在PySpark中将数组列转换为带有静态列表索引的结构体

yrdbyhpb  于 2023-08-03  发布在  Spark
关注(0)|答案(1)|浏览(123)

我有一个带有数组列的spark Dataframe 。数组总是具有相同的长度,例如像这样:

输入df

col1
["a", "b", "c"]
["d", "e", "f"]

我想将dataframe转换为下面的静态列表中的索引:
第一个月

期望输出df

| 新柱| new_column |
| --| ------------ |
| {1:“a”,1.5:|“B”,2:“c”} "b", 2: "c"} |
| {1:“d”,1.5:|“e”,2:“d”} "e", 2: "d"} |

  • 注意 *:我正在寻找一个用PySpark编写的解决方案,我使用的是Spark版本3.3.0

我尝试过不同版本的struct、create_map和expr,但没有一个能达到我想要的效果。
最终目标是能够使用特定的键查询new_column中的值。
类似于这个的东西:df.select(col('new_column').getItem(key))

u2nhd7ah

u2nhd7ah1#

你可以使用map_from_arrays
Example

df.withColumn("col1", expr("map_from_arrays(array(1.0, 1.5, 2.0), col1)"))

字符串
Output

+------------------------------+
|col1                          |
+------------------------------+
|{1.0 -> a, 1.5 -> b, 2.0 -> c}|
+------------------------------+


然后,您可以使用以下表达式从map中获取键:

corrected.select(col("col1").getItem("1.0"))


其给出:

+---------+
|col1[1.0]|
+---------+
|a        |
+---------+


祝你好运!

相关问题