gpt4 book ai didi

apache-spark - 查询 Parquet 记录中的嵌套数组

转载 作者:行者123 更新时间:2023-12-04 04:50:30 26 4
gpt4 key购买 nike

我正在尝试不同的方法来查询记录数组中的记录并将完整的行显示为输出。

我不知道哪个嵌套对象有字符串“pg”。但我想查询特定对象。对象是否有“pg”。如果“pg”存在,那么我想显示完整的行。如何在不指定对象索引的情况下在嵌套对象上编写“spark sql 查询”。所以我不想使用 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"}
]
}
}
}
]
}

我正在使用 Spark SQL 上下文来查询读取的数据帧。所以如果输入是

Row no   Firstname Children.name
1 John Max
Pg
2 Bru huna
aman

输出应该返回 poq 1,因为它有一行 children.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))

以上查询无效。但它在我查询 children[1].name.

时有效

我还想知道是否可以过滤一组记录然后展开。而不是首先分解并创建大量行然后进行过滤。

最佳答案

看来可以用

org.apache.spark.sql.functions.explode(e: Column): Column

例如在我的项目中(在 java 中),我嵌套了这样的 json:

{
"error": [],
"trajet": [
{
"something": "value"
}
],
"infos": [
{
"something": "value"
}
],
"timeseries": [
{
"something_0": "value_0",
"something_1": "value_1",
...
"something_n": "value_n"
}
]
}

我想分析“时间序列”中的数据,所以我做了:

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");

我也是 spark 新手。希望这能给你一个提示。

关于apache-spark - 查询 Parquet 记录中的嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37270703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com