数据框加载了不同的列类型,以及如何将ArrayType列转换为另一列

时间:2020-09-06 13:12:32

标签: pyspark

我有一个数据框,其中包含我使用collect_set创建的列。它的类型是:

t.StructField("list_of_stuff", t.ArrayType(t.StringType(), False), True)

我想创建一个测试,通过与使用相同模式从json文件加载的数据帧进行比较,来验证数据帧。 尽管文件中的所有行在该字段中均包含有效的数组值,但是加载的数据框将获得具有以下类型的架构(其他列相同):

t.StructField("list_of_stuff", t.ArrayType(t.StringType(), True), True)

因此,当我尝试使用assert_frame_equal进行比较时,我收到一个错误,即列不相同。

这里有2个问题:

  1. 如果我使用t.ArrayType(t.StringType(),False)提供了一个架构,为什么它会加载t.ArrayType(t.StringType(),True)?
  2. 如何将该列转换为t.ArrayType(t.StringType(),False)?

1 个答案:

答案 0 :(得分:1)

我设法处理了#2:

converter = udf(lambda x: x, t.ArrayType(t.StringType(), False))
df = df.withColumn("list_of_stuff", converter("list_of_stuff"))