[[1] * 4] * 3
или даже:
[[1, 1, 1, 1]] * 3
Создает список, который ссылается на внутренний [1,1,1,1]
3 раза - не три копии внутреннего списка, поэтому в любое время, когда вы изменяете список (в любом позиция), вы увидите изменение три раза.
Это то же самое, что и в этом примере:
>>> inner = [1,1,1,1]
>>> outer = [inner]*3
>>> outer
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
>>> inner[0] = 5
>>> outer
[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
, где это, вероятно, немного менее удивительно.
StructField('age',IntegerType(),False)
Ваше поле возраста имеет тип int. Но когда вы читаете из CSV, все читается как строки. Вместо этого вы можете изменить тип данных на StringType
в схеме, а затем преобразовать столбец в IntegerType
:
df = df.withColumn("age", df["age"].cast(IntegerType())).collect()