PySpark DataFrame Когда использовать / не использовать Выбрать - PullRequest
0 голосов
/ 15 февраля 2020

На основе документа PySpark:

DataFrame эквивалентен реляционной таблице в Spark SQL и может быть создан с использованием различных функций в SQLContext

Значение Я могу использовать Select для отображения значения столбца, однако иногда я вижу, что вместо них используются эти два эквивалентных кода:

# df is a sample DataFrame with column a
df.a
# or
df['a']

И иногда, когда я использую select, я могу получить ошибку вместо них и тиски иногда мне приходится использовать Select.

Например, это DataFrame для поиска собаки по заданной проблеме с изображением:

joined_df.printSchema()
root
 |-- folder: string (nullable = true)
 |-- filename: string (nullable = true)
 |-- width: string (nullable = true)
 |-- height: string (nullable = true)
 |-- dog_list: array (nullable = true)
 |    |-- element: string (containsNull = true)

Если я хочу выбрать детали собаки и показать В 10 строках этот код показывает ошибку:

print(joined_df.dog_list.show(truncate=False))

Traceback (most recent call last):
 File "<stdin>", line 2, in <module>
    print(joined_df.dog_list.show(truncate=False))
TypeError: 'Column' object is not callable

И это не так:

print(joined_df.select('dog_list').show(truncate=False))

Вопрос1: Когда мне нужно использовать Select, а когда мне нужно использовать df.a или df ["a"]

Вопрос2: что означает ошибка выше? Объект «Столбец» не может быть вызван

1 Ответ

1 голос
/ 16 февраля 2020

df.col_name возвращает объект Column, но df.select("col_name") возвращает другой фрейм данных

см. Это для документации

Ключ здесь в том, что эти два метода возвращают два разных объекты, поэтому ваши print(joined_df.dog_list.show(truncate=False)) дают вам ошибку. Это означает, что у объекта Column нет этого метода .show, но у фрейма данных.

Поэтому, когда вы вызываете функцию, функция принимает в качестве входных данных столбец, вам следует использовать df.col_name, если вы хотите работать с фреймом данных. уровень, вы хотите использовать df.select ("col_name")

...