gpt4 book ai didi

apache-spark - 使用内置插件在 spark SQL 中将一组 map 合并/连接成一个 map

转载 作者:行者123 更新时间:2023-12-05 03:41:54 26 4
gpt4 key购买 nike

考虑以下 DataFrame。在这里,我希望在不使用 UDF 的情况下将 map 数组合并为一张 map 。

+---+------------------------------------+
|id |greek |
+---+------------------------------------+
|1 |[{alpha -> beta}, {gamma -> delta}] |
|2 |[{epsilon -> zeta}, {etha -> theta}]|
+---+------------------------------------+

我想我已经尝试了所有 pyspark 3 docs 中的映射函数.我以为我可以执行 map_from_entries,但它只是抛出一个异常,它说它需要 map 而不是 map 数组?

虽然我知道使用 UDF 很容易做到这一点,但我很难相信没有更简单的方法?

可运行的python代码

from pyspark.sql import SparkSession
spark = (
SparkSession
.builder
.getOrCreate()
)

df = spark.createDataFrame([
(1, [{"alpha": "beta"}, {"gamma": "delta"}]),
(2, [{"epsilon": "zeta"}, {"etha": "theta"}])
],
schema=["id", "greek"]
)

最佳答案

另一个使用高阶函数的版本:

map_schema = df.selectExpr('greek[0]').dtypes[0][1]

expr = "REDUCE(greek, cast(map() as {schema}), (acc, el) -> map_concat(acc, el))".format(schema=map_schema)
df = df.withColumn("Concated", F.expr(expr))

输出:

+---+------------------------------------+--------------------------------+
|id |greek |Concated |
+---+------------------------------------+--------------------------------+
|1 |[{alpha -> beta}, {gamma -> delta}] |{alpha -> beta, gamma -> delta} |
|2 |[{epsilon -> zeta}, {etha -> theta}]|{epsilon -> zeta, etha -> theta}|
+---+------------------------------------+--------------------------------+

关于apache-spark - 使用内置插件在 spark SQL 中将一组 map 合并/连接成一个 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67533261/

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