我有一个名为 Filters 的列的 pyspark 数据框:“array>”
我想将我的数据框保存在 csv 文件中,因为我需要将数组转换为字符串类型。
我尝试强制转换它: DF.Filters.tostring()
和 DF.Filters.cast(StringType())
,但两种解决方案都会为过滤器列中的每一行生成错误消息:
org.apache.spark.sql.catalyst.expressions.UnsafeArrayData@56234c19
代码如下
from pyspark.sql.types import StringType
DF.printSchema()
|-- ClientNum: string (nullable = true)
|-- Filters: array (nullable = true)
|-- element: struct (containsNull = true)
|-- Op: string (nullable = true)
|-- Type: string (nullable = true)
|-- Val: string (nullable = true)
DF_cast = DF.select ('ClientNum',DF.Filters.cast(StringType()))
DF_cast.printSchema()
|-- ClientNum: string (nullable = true)
|-- Filters: string (nullable = true)
DF_cast.show()
| ClientNum | Filters
| 32103 | org.apache.spark.sql.catalyst.expressions.UnsafeArrayData@d9e517ce
| 218056 | org.apache.spark.sql.catalyst.expressions.UnsafeArrayData@3c744494
示例 JSON 数据:
{"ClientNum":"abc123","Filters":[{"Op":"foo","Type":"bar","Val":"baz"}]}
谢谢 !!
原文由 Omar14 发布,翻译遵循 CC BY-SA 4.0 许可协议
我创建了一个示例 JSON 数据集来匹配该模式:
最好使用使数组变平的 explode() 函数,然后是星形扩展符号来解决您的问题:
使其成为用逗号分隔的单列字符串:
爆炸阵列参考: Spark 中的展平行
“结构”类型的星形扩展参考: 如何在火花数据框中展平结构?