我是Hive的新手,它尝试运行查询,其中列import React from 'react';
function feed (props) {
function openPopup(){
//code relevant to open popup
}
return (
<div className="card-header">
<h2>{props.firstname} {props.middleInitial} {props.lastname}</h2>
<h4 className="card-title">{props.gender}</h4>
</div>
<div className="card-footer">
<button onClick={openPopup} className="btn btn-secondary">Click To view Samples</button>
</div>
);
}
export default feed;
中的一列被描述为类型字符串,并且包含诸如(col1)
之类的键值对。我试图提取一些值,所以我可以做一些事情,例如返回col1包含color = blue的所有行。
我一直在尝试使用{color=blue, name=john, size=M}
,但是我不认为这是正确的方法,因为我不确定该字段在技术上是否是json数组。
答案 0 :(得分:1)
使用与Hive兼容的SPARK SQL。
如果col1是字符串,这可以是一个解决方案:
val initDF = spark.sql("select '{color=blue, name=john, size=M}' as col1 union select '{color=red, name=jim, size=L}' as col1")
initDF.show(false)
它显示:
+-------------------------------+
|col1 |
+-------------------------------+
|{color=blue, name=john, size=M}|
|{color=red, name=jim, size=L} |
+-------------------------------+
如果只想获取其中color = blue的行
initDF.where("col1 like '%color=blue%'").show(false)
哪个显示了预期的结果:
+-------------------------------+
|col1 |
+-------------------------------+
|{color=blue, name=john, size=M}|
+-------------------------------+
如果col1是一个结构:
val initDFStruct = spark.sql("select 'blue' as color, 'john' as name, 'M' as size union select 'red' as color, 'jim' as name, 'L'")
.selectExpr("(color, name, size) as col1")
initDFStruct.show(false)
它显示:
+---------------+
|col1 |
+---------------+
|[red, jim, L] |
|[blue, john, M]|
+---------------+
initDFStruct.where("col1.color = 'blue'").show(false)
哪个显示了想要的结果:
+---------------+
|col1 |
+---------------+
|[blue, john, M]|
+---------------+
总而言之,如果将其作为字符串列,则可以在where子句中使用
where col1 like '%color=blue%'
而如果将其作为结构,则where子句应为:
"col1.color = 'blue'
答案 1 :(得分:0)
您可以将字符串转换为map(使用逗号删除大括号和空格,并使用str_to_map函数)。蜂巢示例:
with your_data as
(
select '{color=blue, name=john, size=M}' str
)
select str as original_string,
m['color'] as color,
m['name'] as name,
m['size'] as size
from
(
select str, str_to_map(regexp_replace(regexp_replace(str,'\\{|\\}',''),', *',','),',','=') m
from your_data --use your table
)s;
结果:
original_string color name size
{color=blue, name=john, size=M} blue john M