【问题标题】:create list of values from array of maps in pyspark从 pyspark 中的地图数组创建值列表
【发布时间】:2022-01-20 22:18:27
【问题描述】:

我有一张这样的桌子

company_id  | an_array_of_maps
--------------------------------------------------------------
234         | [{"a": "a2", "b": "b2"}, {"a": "a4", "b": "b2"}]
123         | [{"a": "a1", "b": "b1"}, {"a": "a1", "b": "b1"}]
678         | [{"b": "b5", "c": "c5"}, {"b": Null, "c": "c5"}]

我想得到一个这样的表(每个地图中“a”键的值)

company_id  | an_array_of_maps
--------------------------------------------------------------
234         | ["a2", "a4"]
123         | ["a1", "a1"]
678         | ["b5", Null]

我试过这个 df.withColumn("array_of_as", F.expr("filter(an_array_of_maps, x -> x.a)")).show()

但我收到以下错误:

AnalysisException: cannot resolve 'filter(`an_array_of_maps`, lambdafunction(namedlambdavariable()['a'], namedlambdavariable()))' due to data type mismatch: argument 2 requires boolean type, however, 'lambdafunction(namedlambdavariable()['a'], namedlambdavariable())' is of string type.;

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql


    【解决方案1】:

    知道了 - 过滤器是错误的功能。应该是:

    (df
      .withColumn("array_of_as", 
                  F.expr("transform(an_array_of_maps, x -> x.a)"))
     ).show()
    

    我没有过滤任何东西,而是将地图列表转换为地图值列表 - 因此进行了转换。

    【讨论】:

      猜你喜欢
      • 2020-11-05
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多