Niv*_*ivi 15 python apache-spark apache-spark-sql pyspark pyspark-sql
我正在寻找一种方法来在pyspark中选择我的数据帧的列.对于第一行,我知道我可以使用df.first()但不确定列,因为它们没有列名.
我有5列,想要遍历每一列.
+--+---+---+---+---+---+---+
|_1| _2| _3| _4| _5| _6| _7|
+--+---+---+---+---+---+---+
|1 |0.0|0.0|0.0|1.0|0.0|0.0|
|2 |1.0|0.0|0.0|0.0|0.0|0.0|
|3 |0.0|0.0|1.0|0.0|0.0|0.0|
Run Code Online (Sandbox Code Playgroud)
Max*_*axU 31
尝试这样的事情:
df.select([c for c in df.columns if c in ['_2','_4','_5']]).show()
Run Code Online (Sandbox Code Playgroud)
Sha*_*per 22
您可以使用数组并将其解压缩到选择中:
cols = ['_2','_4','_5']
df.select(*cols).show()
Run Code Online (Sandbox Code Playgroud)
该方法select接受列名(字符串)或表达式(Column)列表作为参数。要选择列,您可以使用:
-- 列名称(字符串):
df.select('col_1','col_2','col_3')
Run Code Online (Sandbox Code Playgroud)
-- 列对象:
import pyspark.sql.functions as F
df.select(F.col('col_1'), F.col('col_2'), F.col('col_3'))
# or
df.select(df.col_1, df.col_2, df.col_3)
# or
df.select(df['col_1'], df['col_2'], df['col_3'])
Run Code Online (Sandbox Code Playgroud)
-- 列名称或列对象的列表:
df.select(*['col_1','col_2','col_3'])
#or
df.select(*[F.col('col_1'), F.col('col_2'), F.col('col_3')])
#or
df.select(*[df.col_1, df.col_2, df.col_3])
Run Code Online (Sandbox Code Playgroud)
星号运算符*可以省略,因为它用于与其他函数保持一致,例如drop不接受列表作为参数的函数。
使用df.schema.names:
spark.version
# u'2.2.0'
df = spark.createDataFrame([("foo", 1), ("bar", 2)])
df.show()
# +---+---+
# | _1| _2|
# +---+---+
# |foo| 1|
# |bar| 2|
# +---+---+
df.schema.names
# ['_1', '_2']
for i in df.schema.names:
# df_new = df.withColumn(i, [do-something])
print i
# _1
# _2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60963 次 |
| 最近记录: |