pg2*_*g20 2 hiveql apache-spark parquet apache-spark-sql spark-dataframe
我正在尝试以不同的方式查询记录数组中的记录并将完整的Row显示为输出。
我不知道哪个嵌套对象具有字符串“ pg”。但是我想查询特定的对象。对象是否具有“ pg”。如果“ pg”存在,那么我想显示该完整行。如何在不指定对象索引的情况下在嵌套对象上写“ spark sql query”。所以我不想使用children.name的索引
我的Avro记录:
{
"name": "Parent",
"type":"record",
"fields":[
{"name": "firstname", "type": "string"},
{
"name":"children",
"type":{
"type": "array",
"items":{
"name":"child",
"type":"record",
"fields":[
{"name":"name", "type":"string"}
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Spark SQL上下文查询读取的数据框。所以如果输入是
Row no Firstname Children.name
1 John Max
Pg
2 Bru huna
aman
Run Code Online (Sandbox Code Playgroud)
输出应该返回poq 1,因为它有一行,其中childs.name的一个对象是pg。
val results = sqlc.sql("SELECT firstname, children.name FROM nestedread where children.name = 'pg'")
results.foreach(x=> println(x(0), x(1).toString))
Run Code Online (Sandbox Code Playgroud)
上面的查询不起作用。但是当我查询children [1] .name时,它可以工作。
我也想知道,如果我可以过滤一组记录然后爆炸。而不是先爆炸并创建大量行,然后进行过滤。
看来你可以用
org.apache.spark.sql.functions.explode(e: Column): Column
Run Code Online (Sandbox Code Playgroud)
例如在我的项目(在Java中)中,我嵌套了json,如下所示:
{
"error": [],
"trajet": [
{
"something": "value"
}
],
"infos": [
{
"something": "value"
}
],
"timeseries": [
{
"something_0": "value_0",
"something_1": "value_1",
...
"something_n": "value_n"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想分析“时间序列”中的数据,所以我做了:
DataFrame ts = jsonDF.select(org.apache.spark.sql.functions.explode(jsonDF.col("timeseries")).as("t"))
.select("t.something_0",
"t.something_1",
...
"t.something_n");
Run Code Online (Sandbox Code Playgroud)
我也很新。希望这可以给您提示。
| 归档时间: |
|
| 查看次数: |
3395 次 |
| 最近记录: |