我有一个名为Filters的列的pyspark dataframe: “阵列>;”
我想将我的数据帧保存在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"}]}
谢谢!!
你可以试试这个:
在Pyspark中,函数to_json()完成了任务。
与简单的字符串转换相比,它还保留了“struct键”(而不仅仅是“struct值”)。因此,对于所报告的示例,我将得到如下内容:
这对我更有用,因为我必须将结果写入Postgres表。在这种格式下,我可以很容易地在Postgres中使用受支持的JSON函数
我创建了一个示例JSON数据集来匹配该模式:
最好使用explode()函数来解决您的问题,该函数先展平一个数组,然后使用star expand表示法:
要使其成为由逗号分隔的单列字符串,请执行以下操作:
分解数组引用:Flattening Rows in Spark
“struct”类型的星扩展引用:How to flatten a struct in a spark dataframe?
相关问题 更多 >
编程相关推荐