使用sum(if…)或条件语句操作两个数据集,这些语句没有Hive Hadoop Python的公共标识符

使用sum(if…)或条件语句操作两个数据集,这些语句没有Hive Hadoop Python的公共标识符,python,hadoop,hive,Python,Hadoop,Hive,我试图对地理ip定位的准确性进行分析,并根据ip地址到ip整数或ip\u数的转换,使用两个非常大的数据集 转换工作如下 ip_number = 16777216*w + 65536*x + 256*y + z (1) 在哪里 我已经用Hive在Hadoop中构建了两个表:表1是2.9MM的行,并被组织到由ip\U编号范围(s)标识的地理位置。字段读取: start_ip, end_ip, zipcode, city ip_number, ip_address, usage 其中,st

我试图对地理ip定位的准确性进行分析,并根据ip地址到ip整数或
ip\u数的转换,使用两个非常大的数据集

转换工作如下

ip_number = 16777216*w + 65536*x + 256*y + z   (1)
在哪里

我已经用Hive在Hadoop中构建了两个表:表1是2.9MM的行,并被组织到由
ip\U编号范围
(s)标识的地理位置。字段读取:

start_ip, end_ip, zipcode, city 
ip_number, ip_address, usage
其中,
start\u ip
是给定zipcode的最小
ip编号
end\u ip
是最大
ip编号

此表是ip_num bucket或range以及相应位置的索引,我需要从另一个具有唯一ip_编号的表中分析它们的使用情况

我的第二个表或数据集包括来自服务器的每个单独IP的交互和使用数据。因此,我有一个25毫米的独特的
ip_编号
(s),其中包含使用数据,我需要在第一个表中按存储桶进行求和和和分组。字段读取:

start_ip, end_ip, zipcode, city 
ip_number, ip_address, usage
对于配置单元中的标准联接,两个数据集之间没有公共字段,所以我被卡住了

我已经尝试过使用完整的外部联接,但我认为结果数据集太大,我们的Hadoop集群无法处理。脚本在映射/还原期间超时

Hive是否有办法从第一个表中选择行,并从第二个表中为符合第一个表中每个桶或范围的ip_编号的活动求和字段?如果没有,Python或R有没有办法操纵Hadoop表来实现这一点

我希望将生成的数据集组织为:

table_1.ip_start, table_1.ip_end, table_1.zipcode, sum(table_2.usage)

非常感谢您的帮助

对此,我可以看到两种方法

  • 创建一个UDF,该UDF将使用加载地理ip数据,并使用该UDF丰富使用情况表
  • 创建一个UDF,将地理ip扩展到完整的32位ip地址,这样您就可以进行标准连接

  • 这两个都不是那么好。选项1的执行速度要快得多,因为它可以通过在使用率表上传递一个映射来输出结果。缺点是加载2.9MM行的地理ip数据需要内存

    对此,我可以看到两种方法

  • 创建一个UDF,该UDF将使用加载地理ip数据,并使用该UDF丰富使用情况表
  • 创建一个UDF,将地理ip扩展到完整的32位ip地址,这样您就可以进行标准连接
  • 这两个都不是那么好。选项1的执行速度要快得多,因为它可以通过在使用率表上传递一个映射来输出结果。缺点是加载2.9MM行的地理ip数据需要内存