gpt4 book ai didi

scala - 生成单行数据框进行查找

转载 作者:行者123 更新时间:2023-12-04 08:50:27 28 4
gpt4 key购买 nike

这是后续 question我之前发布的。
第1步:

scala> spark.sql("select map('s1', 'p1', 's2', 'p2', 's3', 'p3') as lookup").show()
+--------------------+
| lookup|
+--------------------+
|[s1 -> p1, s2 -> ...|
+--------------------+
第2步:
scala> val df = Seq(("s1", "p1"), ("s2", "p2"), ("s3", "p3")).toDF("s", "p")
df: org.apache.spark.sql.DataFrame = [s: string, p: string]

scala> df.show()
+---+---+
| s| p|
+---+---+
| s1| p1|
| s2| p2|
| s3| p3|
+---+---+
第 3 步:
scala> val df1 = df.selectExpr("map(s,p) lookup")
df1: org.apache.spark.sql.DataFrame = [cc: map<string,string>]

scala> df1.show()
+----------+
| lookup|
+----------+
|[s1 -> p1]|
|[s2 -> p2]|
|[s3 -> p3]|
+----------+
我在 step3 中的预期结果是我在 step1 中得到的结果。我怎样才能实现它?

最佳答案

键和值的两列应该是 aggregated into arrays在将它们合并成 map 之前.

import org.apache.spark.sql.functions._

df.agg(collect_list("s").as("s"), collect_list("p").as("p"))
.select(map_from_arrays('s,'p).as("lookup"))
.show(false)
输出:
+------------------------------+
|lookup |
+------------------------------+
|[s1 -> p1, s2 -> p2, s3 -> p3]|
+------------------------------+
没有 collect_list调用,每一行将被单独转换成一个 map 。

关于scala - 生成单行数据框进行查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64126114/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com