gpt4 book ai didi

apache-spark - Spark/SQL 2.4 checksum()、md5等

转载 作者:行者123 更新时间:2023-12-04 12:03:29 35 4
gpt4 key购买 nike

SELECT checksum(c)
FROM
(
SELECT to_hex( md5( to_utf8(
concat(
trim(coalesce("dcpheader_dcploaddayutc",'')),
trim(coalesce("dcpheader_dcploadmonthutc",''))
)
) ) ) -- end of to_hex, md5, to_utf ()
FROM datalake_landing.instantoffer_v2_member_new
) as z(c)

上面的SQL查询 作品 在 AWS 雅典娜/普雷斯托 并为一组行生成单个校验和,以便我可以确定是否有任何数据已更改,或者将一个表中的一组行与另一个表中的一组行进行比较,以获得行集相等/不等式。

示例输出为 1 行/列,即 f5 09 49 03 a6 26 fd 5e

可悲的是,上面的 SQL 确实是 不适用于 Spark/SQL 2.4 (截至 2019 年 3 月的最新版本)。

在 Spark SQL 中运行相同的语句会产生错误,因为内置函数不存在,至少与 Presto 的名称不同。

https://spark.apache.org/docs/latest/api/sql/index.html#hex

我查看了 Spark/SQL 函数列表,但没有找到 校验和 相当于 Presto。

我想知道的是是否可以更改 SQL 查询以在 Spark/SQL 2.4 中产生相同的结果?
理想情况下是在纯 Spark/SQL 中还是作为使用 PySpark/SQL 的第二个选项?

到目前为止,这是我的 Spark/SQL 版本:
spark.sql("""SELECT hex( md5( \
encode( \
concat( \
trim(coalesce(dcpheader_dcploaddayutc,'')), \
trim(coalesce(dcpheader_dcploadmonthutc,''))
) \
, 'utf-8') ) ) \
FROM datalake_landing.instantoffer_v2_member_new """).show(10,False)

此行集需要校验和/聚合为一个值,Presto 使用 Checksum() 函数处理该值。

下面是一个“穷人”替代品,它使用逐行校验和进行内连接来比较两个行集的相等性 - 目标表和目标表。
我希望在 Presto 校验和聚合提供的 Spark SQL 中有更简单/更干净/更快的替代方案。
spark.sql(""" \
with t1 as ( \
SELECT hex( md5( encode( \
concat( \
trim(coalesce(dcpheader_generatedmessageid,'')), \
trim(coalesce(dcpheader_dcploadmonthutc,'')) \
), 'utf-8') \
)) as c \
FROM datalake_reporting.instantoffer_v2_member_6 order by c), \
t2 as ( \
SELECT hex( md5( encode( \
concat( \
trim(coalesce(dcpheader_generatedmessageid,'')), \
trim(coalesce(dcpheader_dcploadmonthutc,'')) \
), 'utf-8') \
) ) as c \
FROM datalake_landing.instantoffer_v2_member_new \
order by c) \
select count(*) from t1 inner join t2 using (c) \
""").show(100, False)

谢谢

最佳答案

我能够在 Athena (Presto) 中运行 SQL md5 查询,它提供与 Spark 相同的输出,见下文:

SELECT to_hex(md5(to_utf8(‘Spark’)))
8CDE774D6F7333752ED72CACDDB05126
对比
> SELECT md5('Spark');
8cde774d6f7333752ed72cacddb05126
有关更多详细信息,请参见:
https://spark.apache.org/docs/latest/api/sql/index.html#hex
https://prestodb.io/docs/current/functions/binary.html

关于apache-spark - Spark/SQL 2.4 checksum()、md5等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55273265/

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