如何计算我的数据中某些特定单词在 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 中出现的频率?的主要内容,如果未能解决你的问题,请参考以下文章
计算 json 对象中键的出现次数 - IMPALA/HIVE