从其他列在 Apache Spark 中创建映射列
Create a map column in Apache Spark from other columns
我搜索了很多,但找不到适合我情况的任何内容。我有一个像这样的数据框:
+-----------------+---------------+
| keys| values|
+-----------------+---------------+
|[one, two, three]|[101, 202, 303]|
+-----------------+---------------+
键有一个字符串数组,值有一个整数数组。
我想创建一个包含键值映射的新列,如下所示:
+-----------------+---------------+---------------------------+
| keys| values| map|
+-----------------+---------------+---------------------------+
|[one, two, three]|[101, 202, 303]|Map(one->101, two->202, etc|
+-----------------+---------------+---------------------------+
我一直在看这个问题,但不确定它是否可以作为我的情况的起点:
我需要 Scala 中的这个。
谢谢!
您可以创建一个与链接问题中的类似的 udf:
val toMap = udf((keys: Seq[String], values: Seq[Int]) => {
keys.zip(values).toMap
})
然后将其用作:
df.withColumn("map", toMap($"keys", $"values"))
从 Spark 2.4 开始,有一个内置版本
def map_from_arrays(keys: Column, values: Column): Column
在 org.apache.spark.sql.functions
我搜索了很多,但找不到适合我情况的任何内容。我有一个像这样的数据框:
+-----------------+---------------+
| keys| values|
+-----------------+---------------+
|[one, two, three]|[101, 202, 303]|
+-----------------+---------------+
键有一个字符串数组,值有一个整数数组。
我想创建一个包含键值映射的新列,如下所示:
+-----------------+---------------+---------------------------+
| keys| values| map|
+-----------------+---------------+---------------------------+
|[one, two, three]|[101, 202, 303]|Map(one->101, two->202, etc|
+-----------------+---------------+---------------------------+
我一直在看这个问题,但不确定它是否可以作为我的情况的起点:
我需要 Scala 中的这个。
谢谢!
您可以创建一个与链接问题中的类似的 udf:
val toMap = udf((keys: Seq[String], values: Seq[Int]) => {
keys.zip(values).toMap
})
然后将其用作:
df.withColumn("map", toMap($"keys", $"values"))
从 Spark 2.4 开始,有一个内置版本
def map_from_arrays(keys: Column, values: Column): Column
在 org.apache.spark.sql.functions