当前位置: 首页 > 知识库问答 >
问题:

如何在spark SQL中实现嵌套collect_list?

曹子平
2023-03-14

我对数据砖spark SQL是新手。我正在寻找嵌套的collect_list并试图找出答案。下面是我的spark实际sql查询

select
            policy.CustomerId,
            collect_list(struct(Number, Type, Id, Product.product))as policydetail 
         from
            policy 
            Left Join
               (
                  SELECT
                     policy.CustomerId,
                     Collect_list(struct(ProductId, productname)) as Product 
                  FROM
                     policy 
                  group by 
                     CustomerId
               )
               product 
               on product.CustomerId = policy.CustomerId
               group by 
               policy.CustomerId

我修改如下

select
                policy.id,
                collect_list(struct(Number, Type, Id, Collect_list(struct(ProductId, productname))))as policydetail 
            from
                policy             
            group by 
               policy.CustomerPartyId

修改查询后,我得到如下错误

"Policy":[
            {
               "Number":"123456",
               "Type":"new",
               "Id":"34355656",
               "Product":[
                  {
                     "ProductId":"2526",
                     "ProductName":"abc"
                  }
               ]
            }
         ]
from pyspark import SparkConf
from pyspark import SparkContext
from pyspark.sql.session import SparkSession
from pyspark.sql import SQLContext

sc = sc = SparkContext.getOrCreate()
spark = SparkSession(sc)
sc_sql = SQLContext(sc)

#ExtractConfig
policy = spark.read.format('csv').options(header='true', inferSchema='true').load("D:/policy.csv")
#RawPath


policy.createOrReplaceTempView("policy")

policydetails = sc_sql.sql("select policy.CustomerId, collect_list(struct(Number, Type, Id, Collect_list(struct(ProductId, productname))))as policydetail from policy group by policy.CustomerId")

pandasDF = policydetails.toPandas()
pandasDF = policydetails.toPandas().to_csv('data1.csv')

共有1个答案

潘雅珺
2023-03-14

我没有测试,因为我没有样本数据。

尝试下面的查询。

select 
    policy.CustomerId, 
    collect_list(
       struct(
          Number, 
          Type, 
          Id, 
          array(
              struct(
                  ProductId, 
                  productname)
              )
       )
) as policydetail 
from policy 
group by policy.CustomerId

select 
    collect_list(
           struct(
               Number, 
               Type, 
               Id, 
               array(
                  struct(
                      ProductId, 
                      productname
                  )
               )
           )
) as policydetail 
from policy 
 类似资料:
  • 我正在处理数据帧,需要提取数据。我有许多嵌套的级别,所以我使用分解和选择来创建第一个级别,但随后我对嵌套级别使用UDF。 我有一个UDF,它取Root.Obj,这是一个数组,我希望它返回一个数组[MyObj] 我的输出类: 简而言之,这是输入模式: 我的自定义项: 这是更复杂的IRL,因为我需要从其他地方检索值,并且有更多的嵌套数组。此外,Obj和FieldC的输入结构比这里复杂得多,我不能(或不

  • 问题内容: 我有嵌套的JSON对象,例如 而且我需要获取_events数组并对其进行解析。但是我不知道_events之前的单元格中的内容以及它们的状态。如何使用这种结构? 问题答案: 就像这样使用它: 这是一个有效的jsFiddle:http : //jsfiddle.net/ErHng/( 注意 :它会输出到控制台,因此您需要/ 在chrome中或在Firefox中打开firebug,然后重新运

  • 本文向大家介绍nginx 如何实现if嵌套的方法示例,包括了nginx 如何实现if嵌套的方法示例的使用技巧和注意事项,需要的朋友参考一下 nginx 不支持 if 嵌套,也不允许在 if 中使用逻辑判断,会报如下错误: nginx: [emerg] "if" directive is not allowed 当业务需要多个条件判断时,可以借助中间变量来实现 如:我们的网站在 pc 端有多个子域名

  • 我有一个列表,在一个列表中,在一个列表中,等等。大约有5层。 在手机上为每个列表创建5个活动很容易,但如果我也想支持平板电脑呢?所以我需要使用主细节流。 然而,我似乎找不到任何与嵌套主细节流相关的教程或信息。 无论如何,下面是我描述的一个例子: 在平板电脑布局中,我希望屏幕一次移动两层。通过从正确的层中选择列表项,用户可以升级到下一层。要返回上一层,用户可以点击后退按钮。 你知道我怎样才能做到吗?

  • 问题内容: 我有以下的Java代码: 下一行工作正常时,为什么这里的工作不正常? 问题答案: 使用(无论嵌套类是否为静态)