- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我刚刚了解了 Hive 中的 collect_set() 函数,并开始从事开发 3 节点集群的工作。
我只有大约 10 GB 需要处理。然而,这项工作确实需要永远。我认为 collect_set() 的实现中可能存在错误,我的代码中存在错误,或者 collect_set() 函数确实是资源密集型的。
这是我的 Hive SQL(没有双关语意):
INSERT OVERWRITE TABLE sequence_result_1
SELECT sess.session_key as session_key,
sess.remote_address as remote_address,
sess.hit_count as hit_count,
COLLECT_SET(evt.event_id) as event_set,
hit.rsp_timestamp as hit_timestamp,
sess.site_link as site_link
FROM site_session sess
JOIN (SELECT * FROM site_event
WHERE event_id = 274 OR event_id = 284 OR event_id = 55 OR event_id = 151) evt
ON (sess.session_key = evt.session_key)
JOIN site_hit hit ON (sess.session_key = evt.session_key)
GROUP BY sess.session_key, sess.remote_address, sess.hit_count, hit.rsp_timestamp, sess.site_link
ORDER BY hit_timestamp;
有 4 个 MR passes。第一次花了大约 30 秒。第二张 map 用了大约 1 分钟。第二次减少的大部分时间大约需要 2 分钟。在过去的两个小时里,它从 97.71% 增加到 97.73%。这是正确的吗?我想一定有什么问题。看了一下日志,不知道是否正常。
[日志示例]
2011-06-21 16:32:22,715 WARN org.apache.hadoop.hive.ql.exec.GroupByOperator: Hash Tbl flush: #hash table = 120894
2011-06-21 16:32:22,758 WARN org.apache.hadoop.hive.ql.exec.GroupByOperator: Hash Table flushed: new size = 108804
2011-06-21 16:32:23,003 INFO org.apache.hadoop.hive.ql.exec.JoinOperator: 4 forwarding 5142000000 rows
2011-06-21 16:32:23,003 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: 5 forwarding 5142000000 rows
2011-06-21 16:32:24,138 INFO org.apache.hadoop.hive.ql.exec.JoinOperator: 4 forwarding 5143000000 rows
2011-06-21 16:32:24,138 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: 5 forwarding 5143000000 rows
2011-06-21 16:32:24,725 WARN org.apache.hadoop.hive.ql.exec.GroupByOperator: Hash Tbl flush: #hash table = 120894
2011-06-21 16:32:24,768 INFO org.apache.hadoop.hive.ql.exec.GroupByOperator: 6 forwarding 42000000 rows
2011-06-21 16:32:24,771 WARN org.apache.hadoop.hive.ql.exec.GroupByOperator: Hash Table flushed: new size = 108804
2011-06-21 16:32:25,338 INFO org.apache.hadoop.hive.ql.exec.JoinOperator: 4 forwarding 5144000000 rows
2011-06-21 16:32:25,338 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: 5 forwarding 5144000000 rows
2011-06-21 16:32:26,467 INFO org.apache.hadoop.hive.ql.exec.JoinOperator: 4 forwarding 5145000000 rows
2011-06-21 16:32:26,468 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: 5 forwarding 5145000000 rows
我在这方面还很陌生,尝试使用 collect_set() 和 Hive Array 使我陷入困境。
提前致谢:)
最佳答案
重大失败。我的解决方案如下。毕竟 COLLECT_SET 没有问题,它只是试图收集所有项目,其中有无限项。
为什么?因为我加入了一些甚至不属于系列的东西。第二次加入曾经是相同的 ON 条件,现在它正确地说 hit.session_key = evt.session_key
INSERT OVERWRITE TABLE sequence_result_1
SELECT sess.session_key as session_key,
sess.remote_address as remote_address,
sess.hit_count as hit_count,
COLLECT_SET(evt.event_id) as event_set,
hit.rsp_timestamp as hit_timestamp,
sess.site_link as site_link
FROM tealeaf_session sess
JOIN site_event evt ON (sess.session_key = evt.session_key)
JOIN site_hit hit ON (sess.session_key = hit.session_key)
WHERE evt.event_id IN(274,284,55,151)
GROUP BY sess.session_key, sess.remote_address, sess.hit_count, hit.rsp_timestamp, sess.site_link
ORDER BY hit_timestamp;
关于hadoop - Hive (Hadoop) 中的 COLLECT_SET(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6433338/
我想在使用 hive 时删除数组中的连续重复项。 collect_list()保留所有重复项,而 collect_set()只保留不同的条目。我有点需要一些中间立场。 例如,从下表: id | n
我有这张表: ╔═════════╦═════════╦══════════════╗ ║ user_id ║ item_id ║ date_visited ║ ╠═════════╬════════
假设我有一个包含 3 行的配置单元表:merchant_id、week_id、acc_id。我的目标是每周收集前 4 周内的唯一客户,我正在使用移动窗口来执行此操作。 我的代码: 创建测试表: CRE
我有下表: hive> describe tv_counter_stats; OK day string event string query_id string user
我正在处理大型数据集上的配置单元,我有一个包含列数组的表,列的内容如下。 ["20190302Prod4" "20190303Prod1" "20190303Prod4" "20190304Prod4
我正在尝试在配置单元查询中使用 collect_set 按条件对组中的列进行分组。每行都有空格作为分隔符,而不是“,”之类的。在这种情况下如何将分隔符更改为“,”或任何其他分隔符? 提前致谢。 问候,
我正在尝试使用 collect_set 获取类别名称字符串列表 不是 groupby 的一部分。 我的代码是 from pyspark import SparkContext from pyspark
我在 hive 中有一个表,如下所示 id name sal 1 sam 2000 2 Ram 3000 3 Tim 4000 4 Ash 5000 我想
一些测试数据,有两列:第一列二进制(在此示例中使用字母数字字节),第二列是整数: from pyspark.sql.types import * from pyspark.sql import fun
如何重写这些查询以避免在 reduce 阶段使用单个 reducer?它需要永远,我失去了使用它的并行性的好处。 select id , count(distinct locations) AS un
我刚刚了解了 Hive 中的 collect_set() 函数,并开始从事开发 3 节点集群的工作。 我只有大约 10 GB 需要处理。然而,这项工作确实需要永远。我认为 collect_set()
有没有办法将重复项保存在 Hive 的收集集中,或者使用其他方法模拟 Hive 提供的那种聚合集合?我想将列中具有相同键的所有项目聚合到一个数组中,并带有重复项。 IE: hash_id | num_
嗨,我在任何地方都找不到这个。 如何在 Google BigQuery 中执行 collect_set? 我有一个已经用大查询编写的查询 选择用户身份,脚步,从表 我需要将每个 user_id 的所有
如果我的目标是将列中的不同值收集为列表,使用其中任何一个是否存在性能差异或优缺点? df.select(column).distinct().collect()... 对比 df.select(col
我有 2 个表,sample_table1,下面有两列 C1 C2 001 a 001 b 001 e 002 c 002 b 003 a 003 c 和 sample_table2
我有下表,其中包含 id 的重复项以及每个 id 的值数组,我想找出每个 id 的唯一值,该怎么做? CREATE TABLE test( id string, values array) 当我运行以
在表 1 中,我有 customer_id、item_id 和 item_rank(根据一些销售额的项目排名)。我想为每个 customer_id 收集一个项目列表,并根据 item_rank 排列它
我有一个聚合 DataFrame,其中有一列是使用 collect_set 创建的。我现在需要再次聚合此 DataFrame,并再次将 collect_set 应用于该列的值。问题是我需要应用 col
Hive 查询 - select ...MYUDF(collect_set(col1))..from tableN 这里的 col1 是字符串类型。我想对传递的 collect_set 数据执行某些逻
我正在处理一个大型 spark DataFrame 中的一列数字,我想创建一个新列来存储出现在该列中的唯一数字的聚合列表。 基本上正是 functions.collect_set 所做的。但是,我只需
我是一名优秀的程序员,十分优秀!