Я использую ноутбук Jupyter с PySpark. Внутри этого я имею блок данных, который имеет схему с именами столбцов и типами (integer, ...) для этих столбцов. Теперь я использую такие методы, как flatMap, но это возвращает список кортежей, которые больше не имеют фиксированного типа. Есть ли способ достичь этого?Плоская карта PySpark должна возвращать кортежи с типизированными значениями
df.printSchema()
root
|-- name: string (nullable = true)
|-- ...
|-- ...
|-- ratings: integer (nullable = true)
Затем я использую flatMap сделать некоторые расчеты со значениями рейтинга (затемненные здесь):
df.flatMap(lambda row: (row.id, 5 if (row.ratings > 5) else row.ratings))
y_rate.toDF().printSchema()
И теперь я получаю ошибку:
TypeError: Can not infer schema for type:
Есть ли способ использовать карту/flatMap/уменьшить, сохранив схему? или по крайней мере возвращающие кортежи, которые имеют значения определенного типа?
Очень полезно. спасибо за ваш пример кода. Я просто не получил участие в FlatMap vs Map. – Matthias
'flatMap' - это функция' RDD [T] => (T => Iterable [U]) => RDD [U] '. Другими словами, он ожидает, что функция вернет 'Itereble' (кортеж Python) и объединит эти (flattens) результат. – zero323
Есть ли способ дать столбцу when/else имя в этом выражении? см. 'df.select (df.id, когда (df.ratings> 5, 5) .otherwise (df.ratings))' @ zero323 – Matthias