如何计算我的数据中某些特定单词在 hive 中出现的频率?

Posted

技术标签:

【中文标题】如何计算我的数据中某些特定单词在 hive 中出现的频率?【英文标题】:how to count the frequency of occurrence of some specific words of my data in hive? 【发布时间】:2019-04-06 15:05:19 【问题描述】:

我的配置单元中有一个 twitter 对象表(json 格式),n 行和 1 列。任务是统计一些单词,如'hon','han'在不同对象中出现的频率(每个对象都有一个名为'text'的属性,其中包括一些文本(字符串类型)),这意味着即使一个单词在一个对象中发生了不止一次,但它只计数一次。 我写了一个如下的查询。

select count(*) from table_name
where regexp(get_json_object(col_name, '$.text'), 'han')
limit 10

并收到类似的错误消息

失败:ParseException line 2:6 无法识别表达式规范中“regexp”“(”“get_json_object”中的输入`

我该如何做这个查询任务?而且我不知道如何忽略正则表达式中的大小写。

【问题讨论】:

【参考方案1】:

使用(?i) 修饰符进行不区分大小写的比较:

select 
      sum(case when text rlike '(?i)han' then 1 else 0 end) cnt_han,
      sum(case when text rlike '(?i)hon' then 1 else 0 end) cnt_hon
  from
(
select get_json_object(col_name, '$.text') as text 
  from table_name
)s;

【讨论】:

您好,感谢您的回复。我尝试了您的代码,但出现以下错误。失败:ParseException line 2:9 无法识别表达式规范中“sum”“(”“when”附近的输入。 而我的 hive 版本是 2.3.4 @SeekerBlood 修正语法错误:应该是 CASE 语句 谢谢伙计!它可以工作并使用我的 java 代码得到相同的结果!顺便问一下,';'之前的's'到底是什么意思 @SeekerBlood 这是一个子查询名称(别名)。 Hive 命令子查询应该有一些别名。

以上是关于如何计算我的数据中某些特定单词在 hive 中出现的频率?的主要内容,如果未能解决你的问题,请参考以下文章

计算特定单词在 C++ 文本文件中出现的次数

如何替换图像的某些单词

计算 json 对象中键的出现次数 - IMPALA/HIVE

HIVE/Impala 查询:计算满足特定条件的行之间的行数

计算某些文本中多字串的出现次数

如何计算小于 Hive 表中特定行的行数?