PySpark DataFrame 何时使用/不使用 Select
PySpark DataFrame When to use/ not to use Select
基于 PySpark 文档:
A DataFrame is equivalent to a relational table in Spark SQL, and can be created using various functions in 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)
如果我想 select 狗的详细信息并显示 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:上面的错误是什么意思? 'Column' 对象不可调用
df.col_name
return 一个列对象但是 df.select("col_name")
return 另一个数据框
这里的关键是这两种方法是 returning 两个不同的对象,这就是为什么 print(joined_df.dog_list.show(truncate=False))
给你的错误。这意味着 Column 对象没有这个 .show 方法,但数据框有。
所以当你调用函数时,函数以Column为输入,你应该使用df.col_name,如果你想在dataframe级别操作,你想使用df.select("col_name")
基于 PySpark 文档:
A DataFrame is equivalent to a relational table in Spark SQL, and can be created using various functions in 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)
如果我想 select 狗的详细信息并显示 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:上面的错误是什么意思? 'Column' 对象不可调用
df.col_name
return 一个列对象但是 df.select("col_name")
return 另一个数据框
这里的关键是这两种方法是 returning 两个不同的对象,这就是为什么 print(joined_df.dog_list.show(truncate=False))
给你的错误。这意味着 Column 对象没有这个 .show 方法,但数据框有。
所以当你调用函数时,函数以Column为输入,你应该使用df.col_name,如果你想在dataframe级别操作,你想使用df.select("col_name")