匹配 hive 数据库中两个字段的最有效方法
Posted
技术标签:
【中文标题】匹配 hive 数据库中两个字段的最有效方法【英文标题】:Most efficient way to match two fields in hive databases 【发布时间】:2019-08-20 11:55:26 【问题描述】:我想基本上匹配两个数据库的电子邮件字段,其中一个表将电子邮件作为电子邮件数组,而另一个表有一个字符串字段,每个表都有数十亿条记录。所以效率很重要。
我尝试过制作一个 python 脚本,但我认为使用我制作的脚本需要很长时间才能完成,它的时间复杂度为 O(n^2)。任何更好的python脚本都非常受欢迎。
如果有人能提出一种非常有用的方法。
【问题讨论】:
您可能需要用一些示例数据展示您的表结构以获得答案。明确的预期结果将有助于进一步。 :-) 【参考方案1】:我会首先尝试将该逻辑推送到 hive 并尝试在两个字段上进行内部连接。您显然需要将它们转换为相同的字符串结构,但这可以在 INNER JOIN 语句本身中完成。由于 Hive 应该在集群中分配计算,因此它将尽可能高效.... 如果您发布表结构,我可以使用应该工作的实际 Hive 语句进行更新。
【讨论】:
完全正确。这个问题太模糊,无法回答。【参考方案2】:我会针对这个问题评估 Apache Spark。即使在单机环境中,Spark 也可以并行处理针对数据库的请求,这在这种具有数十亿条记录的情况下会有所帮助。
当然,集群会更好,但我在本地机器上使用 Spark 的性能非常令人满意。
最后,Spark 支持 Python 和 SQL,我的意思是,您可以在这两种语言之间进行选择来创建您的解决方案。您可以使用 pyspark shell 从这里开始https://www.datacamp.com/community/tutorials/apache-spark-python。
【讨论】:
以上是关于匹配 hive 数据库中两个字段的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章
检查具有数字和字符数据的 2 个数据帧之间差异的最有效方法?
当列值是 84 字节文本字段时,postgres 中保持列唯一的最有效方法是啥?
MySQL - 与外部应用程序共享 SQL 中使用的静态值的最有效方法?
在 Java 中查看 ArrayList 是不是包含对象的最有效方法