有没有办法在Pyspark中扩展像struct这样的数组?星星不起作用

qq24tv8q  于 2023-11-16  发布在  Spark
关注(0)|答案(1)|浏览(178)

我有一个 Dataframe ,在Pyspark中有以下嵌套:

>content: struct
   importantId: string
   >data: array
      >element: struct
         importantCol0: string
         importantCol1: string

字符串
我需要以下输出:
| importantId|重要Col 0|重要Col 1|
| --|--|--|
| 10800005 |0397AZ| 0397AZ|
| 10800006 |0397BZ| 0397BZ|
我尝试了以下代码:df1 = df0.select(F.col('content.*'))
我得到了:
| importantId|数据|
| --|--|
| 10800005 |{importantCol0:0397AZ,importantCol1:0397AZ}|
| 10800006 |{importantCol0:0397BZ,importantCol1:0397BZ}|
我接着说:
df2 = df1.select(F.col('importantId'), F.col('data.*')
但我得到以下错误:
AnalysisException: Can only star expand struct data types. Attribute: ArrayBuffer(data).
有谁知道如何解决这个问题吗?我期待一种像结构一样扩展数组的方法

bxgwgixi

bxgwgixi1#

让我们使用inline将结构体数组分解为列和行

result = df.select('*', F.inline('data')).drop('data')

字符串
例如,

df.show()

+------------+--------------------+
|importantCol|                data|
+------------+--------------------+
|           1|    [{1, 2}, {4, 3}]|
|           2|[{10, 20}, {40, 30}]|
+------------+--------------------+

result.show()

+------------+-------------+-------------+
|importantCol|importantCol0|importantCol1|
+------------+-------------+-------------+
|           1|            1|            2|
|           1|            4|            3|
|           2|           10|           20|
|           2|           40|           30|
+------------+-------------+-------------+

相关问题