Программно преобразовать все столбцы определенных типов данных в другие типы данных в Scala Spark.

Я программно пытаюсь преобразовать типы данных столбцов и столкнулся с некоторыми проблемами кодирования.

Для этого я изменил используемый код здесь.

Данные >> любые числа читаются как строки.

Код >>

import org.apache.spark.sql
raw_data.schema.fields
    .collect({case x if x.dataType.typeName == "string" => x.name})
    .foldLeft(raw_data)({case(dframe,field) => dframe(field).cast(sql.types.IntegerType)})

Ошибка >>

<console>:75: error: type mismatch;
 found   : org.apache.spark.sql.Column
 required: org.apache.spark.sql.DataFrame
    (which expands to)  org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
           .foldLeft(raw_data)({case(dframe,field) => dframe(field).cast(sql.types.IntegerType)})

person Leothorn    schedule 27.11.2018    source источник


Ответы (1)


Проблема в том, что результатом dframe(field).cast(sql.types.IntegerType) в foldLeft является столбец, однако для продолжения итерации ожидается кадр данных. В ссылке, где используется код, исходный из dframe.drop(field), который возвращает кадр данных и, следовательно, работает.

Чтобы исправить это, просто используйте withColumn, который настроит конкретный столбец, а затем вернет весь фрейм данных:

foldLeft(raw_data)({case(dframe, field) => dframe.withColumn(field, dframe(field).cast(sql.types.IntegerType))})
person Shaido    schedule 27.11.2018