为啥在火花中运行时配置单元查询不起作用
Posted
技术标签:
【中文标题】为啥在火花中运行时配置单元查询不起作用【英文标题】:Why doesn't hive query work when run in spark为什么在火花中运行时配置单元查询不起作用 【发布时间】:2019-09-02 03:56:14 【问题描述】:我开发了一个 hive 查询,它使用横向视图和 get_json_object 来解压一些 json。该查询使用 jdbc 客户端 (dbvisualizer) 运行良好,但是当从 java 应用程序作为 spark sql 运行时,在相同的数据上,它什么也不返回。
如果我创建一个数组来模拟预期的解压 json,则查询有效
array('Plan A','Plan B','Plan C','Plan D')
但是如果我用这个语句解包它不会:
split(regexp_replace(get_json_object('"product_offer":["productName":"Plan A","productName":"Plan B","productName":"Plan C","productName":"Plan D"]', '$.product_offer.productName'), '\\[|\\]|"', ''), ',' )
在 dbvisualizer 中单独运行时,它们产生相同的输出,并且在比较时是等效的。
这是查询的精简版本,适用于具有一行的测试表,为 java 转义:
"SELECT pageid , exp.* , exp2.* , exp3.* from stephen \n" +
"lateral view outer posexplode( split(regexp_replace(get_json_object('\"product_offer\":[\"productName\":\"P lan A\",\"productName\":\"Plan B\",\"productName\":\"Plan C\",\"productName\":\"Plan D\"]', '$.product_offer.productName'), '\\\\[|\\\\]|\"', ''), ',' ) ) exp as seqn, product_name\n" +
"lateral view outer posexplode( array('aaaa','bbb','ccc','ddd')) exp2 as seqo, product_offer\n" +
"lateral view outer posexplode( array('Delete','Add','Add','Delete')) exp3 as seqa, product_action\n" +
"where (seqn=seqo)\n" +
" and (seqn=seqa)\n"
我使用的是 java 8,hive 版本'2.2.0 rda840b0f8fa99cab9f004810cd22abc207493cae'
没有记录错误。
【问题讨论】:
【参考方案1】:当我确定 get_json_object 行为不端时,我将问题改写为enter link description here:用于获取所有产品名称的正确路径是
'$.product_offer[*].productName'
【讨论】:
以上是关于为啥在火花中运行时配置单元查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章
当图像在 docker 机器中运行时,X11 转发不起作用,但如果图像在没有 docker 机器的情况下运行,则它可以正常工作