我正在尝试使用pyspark将一些mongo集合吸收到big query中,模式如下所示。
root
|-- groups: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- my_field: struct (nullable = true)
| | | |-- **{ mongo id }**: struct (nullable = true)
| | | | |-- A: timestamp (nullable = true)
| | | | |-- B: string (nullable = true)
| | | | |-- C: struct (nullable = true)
| | | | | |-- abc: boolean (nullable = true)
| | | | | |-- def: boolean (nullable = true)
| | | | | |-- ghi: boolean (nullable = true)
| | | | | |-- xyz: boolean (nullable = true)
问题是我们在my_field中存储了id,每个组都有自己的id,当我将所有内容导入到大型查询中时,我最终会为每个id创建一个新列。我想将my_field转换为字符串,并将所有嵌套字段存储为json或类似的内容。但当我尝试转换时,我收到了此错误
temp_df = temp_df.withColumn("groups.my_field", col("groups.my_field").cast('string'))
TypeError: Column is not iterable
我错过了什么?
2条答案
按热度按时间nqwrtyyt1#
原来,为了追加/删除/重命名嵌套字段,您需要更改模式。我不知道这一点。下面是我的答案。我从这里https://stackoverflow.com/a/48906217/984114复制并修改了代码,以便使其能够与我的模式一起工作
下面是“exclude_nested_field”的修改版本
我是这样调用这个函数的
az31mfrm2#
我需要一个通用的解决方案来处理任意级别的嵌套列强制转换。
您还可以使用点标记法对嵌套列强制转换进行调用,如下所示