我正在处理一个具有嵌套结构类型列的数据框。正在从包含N个文件的文件夹中获取数据。但这些嵌套列可能不会出现在所有这些文件中。我想以这样一种方式创建数据框,它包括所有列,如果列不存在,则设置空值。我尝试使用下面的代码:
df = df.withColumn('fields_acceptance_criteria',
F.when(df.schema.simpleString().find("fields_acceptance_criteria$394") == -1, lit("null")) \
.otherwise(col("fields.acceptance_criteria$394")))
但这会导致TypeError:
条件应为列
有人可以建议我一些方法,我如何才能实现它。
1条答案
按热度按时间5m1hhzi41#
这就是我们在Spark DataFrames上使用**的方式:
你应该比较列。在你的情况下你比较
df.schema.simpleString().find("fields_acceptance_criteria$394") == -1
它不遵守条件(col(A)== X)
编辑:另一种方法
它可以避免使用时,否则使用过滤器代替。这里有一个例子,你可以从中得到启发,以获得解决方案。当然,在过滤器中,你可以使用行验证的方法。
我们将添加一个名为newCol的新列,它包含两个不同的值OK(当一行包含1.0时)和KO(当一行不包含1.0时)
为了做到这一点,我们将创建两个dataframe应用过滤器
现在我们将应用union来生成结果: