Преобразуйте все определенные столбцы типов данных в другие типы данных программно в Scala Spark - PullRequest
0 голосов
/ 27 ноября 2018

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

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

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

Код >>

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)})

1 Ответ

0 голосов
/ 27 ноября 2018

Проблема в том, что результатом 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))})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...