Ошибка Pyspark при создании фрейма данных: объект «StructField» не имеет атрибута «кодировать» - PullRequest
0 голосов
/ 23 апреля 2019

Я сталкиваюсь с небольшой проблемой при создании фрейма данных:

from pyspark.sql import SparkSession, types

spark = SparkSession.builder.appName('test').getOrCreate()

df_test = spark.createDataFrame(
    ['a string', 1],
    schema = [
        types.StructField('col1', types.StringType(), True),
        types.StructField('col2', types.IntegerType(), True)
    ]
)

## AttributeError: 'StructField' object has no attribute 'encode'

Я не вижу ничего плохого в своем коде (это так просто, я чувствую себя очень глупо).Но я не могу заставить это работать.Можете ли вы указать мне правильное направление?

1 Ответ

1 голос
/ 23 апреля 2019

Вы прошли большую часть пути!

При вызове createDataFrame с указанием схемы схема должна быть StructType. Обычного списка недостаточно.

  1. Создать СДР из кортежей или списков из исходного СДР;
  2. Создание схемы , представленной StructType, соответствующей структуре кортежей или списков в RDD, созданном на шаге 1.
  3. Применение схемы к RDD с помощью метода createDataFrame, предоставляемого SparkSession.

Кроме того, первое поле в createDataFrame представляет собой список строк, а не список значений для одной строки. Таким образом, один одномерный список приведет к ошибкам. Завершение в диктовку, которая явно определяет, какие столбцы содержат значения, является одним решением, но могут быть и другие.

Результат должен выглядеть примерно так:

df_test = spark.createDataFrame(
    [{'col1': 'a string', 'col2': 1}],
    schema = types.StructType([
        types.StructField('col1', types.StringType(), True),
        types.StructField('col2', types.IntegerType(), True)
    ])
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...