Я думаю, что ваша ошибка может зависеть от структуры вашего parents
столбца.
Когда я запускаю следующий код, он работает нормально:
test_df = spark.createDataFrame([("a","b",1),("c","d",0)], ("alias","value","number"))
test_df.select("alias","value",when(test_df.number==0,"0").otherwise(test_df.number)).show()
Результаты:
+-----+-----+---------------------------------------------+
|alias|value|CASE WHEN (number = 0) THEN 0 ELSE number END|
+-----+-----+---------------------------------------------+
| a | b | 1 |
| c | d | 0 |
+-----+-----+---------------------------------------------+
Примечание. Я удалил [0]
из числа, поскольку здесь вы можете напрямую получить доступ только к элементу, если это массив, но тогда проверка с помощью == 0
не будет иметь смысла.Поэтому я думаю, что у вас есть ошибка, потому что вы проверяете parents==0
, который указывает, что родители являются числовым значением, а позже вы получаете доступ к parents[0]
, который не работает для числовых значений.Таким образом, вы получаете «ошибку несоответствующего типа»
Если вы хотите иметь дело с массивами в соответствующем столбце, вы должны использовать что-то вроде:
test_df = spark.createDataFrame([("a","b",[1,]),("c","d",[0,])], ("alias","value","number"))
test_df.select("alias","value",when(array_contains(test_df.number,0),"0").otherwise(test_df.number)).show()