Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 嵌套记录上的Spark Sql查询。我想先过滤嵌套的记录数组,然后分解(将它们展开成行)_Apache Spark_Apache Spark Sql_Hiveql_Parquet - Fatal编程技术网

Apache spark 嵌套记录上的Spark Sql查询。我想先过滤嵌套的记录数组,然后分解(将它们展开成行)

Apache spark 嵌套记录上的Spark Sql查询。我想先过滤嵌套的记录数组,然后分解(将它们展开成行),apache-spark,apache-spark-sql,hiveql,parquet,Apache Spark,Apache Spark Sql,Hiveql,Parquet,我想首先只过滤具有Max的行,然后只分解嵌套列中具有Max的行 我的Avro记录: { "name": "Parent", "type":"record", "fields":[ {"name": "firstname", "type": "string"}, { "name":"children", "type":{ "type": "array", "items":{

我想首先只过滤具有Max的行,然后只分解嵌套列中具有Max的行

我的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"}                                                                    
                       {"name":"price","type":["long", "null"]}

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

Row no   Firstname Children.name
    1    John       [[Max, 20],[Pg, 22]]
    2    Bru        [[huna, 10], [aman, 12]]
我首先通过分解内部表进行查询。所以嵌套列被拆分为两行

Row no   Firstname Children.name    children.price
        1    John       Max               20
        1    John       Pg                22
        2    Bru        huna              10
        2    Bru        aman              12
q1)我想首先只过滤最大值的行,然后只分解最大值的行。在当前情况下,如果一列中有一百万个值,那么它首先生成一百万行,然后检查Max是否存在

问题2)我想首先只过滤price>12的行,然后只分解price>12的行。在当前情况下,如果一列中有一百万个值,则首先生成一百万行,然后检查是否存在price>12

大概是这样的:
val results=sqlc.sql(“从父侧视图中选择firstname,child.name分解(children)childTable作为child,其中child.price>12”)以下是两个问题的答案: ans1)如果要查找嵌套记录数组中是否存在“字符串”:

var results = sqlc.sql("SELECT firstname, children.name  FROM parent where array_contains(children['name'], 'pg') ")
ans2)如果要对嵌套记录数组应用条件。使用自定义项

sqlc.udf.register("myPriceFilter", (price: mutable.WrappedArray[String]) => (price exists (a =>  (a.toLong < 67735) )))

var results = sqlc.sql("SELECT firstname, explode(children.price)  FROM parent where myPriceFilter(children['price']) ")
sqlc.udf.register(“myPriceFilter”,(price:mutable.WrappedArray[String])=>(price存在(a=>(a.toLong<67735)))
var results=sqlc.sql(“从myPriceFilter(children['price'])所在的父级中选择firstname,explode(children.price))

筛选包含max的子项名称,以创建新的数据帧,然后分解。你试过了吗?下面的查询无效val results=sqlc.sql(“SELECT firstname,children.name FROM parent,where children.name='Max')我说的包含不等于。您可以在spark scala文档中找到所有可以使用的sql函数,也请查看您的其他问题!他们暂时悬而未决。