pyspark.sql.Column


pyspark.sql.Column见名就知其意,表示DataFrame的某一个列的类。

column实例、表达式的创建

df.colName
#或者
df["colName"]
#表达式的创建
df.colName + 1
1 / df.colName

alias()

DataFrame和Column都有alias()用法

>>> df.select(df.age.alias("age2")).collect()
[Row(age2=2), Row(age2=5)]

asc()

返回基于列的升序的排序表达式。

>>>df = spark.createDataFrame([('Tom', 80), ('Alice', None)], ["name", "height"])
>>>df.select(df.name).orderBy(df.name.asc()).collect()
[Row(name='Alice'), Row(name='Tom')]
>>>df.select(df.name).orderBy(df.name,ascending=True).collect()
[Row(name='Alice'), Row(name='Tom')]

asc_nulls_first()、asc_nulls_last()

  • asc_nulls_first()表示返回基于列的升序的排序表达式,并且空值在非空值之前返回。
  • asc_nulls_last()表示返回基于列的升序的排序表达式,并且空值在非空值之后返回
>>> df = spark.createDataFrame([('Tom', 80), (None, 60), ('Alice', None)], ["name", "height"])
>>> df.select(df.name).orderBy(df.name.asc_nulls_first()).collect()
[Row(name=None), Row(name='Alice'), Row(name='Tom')]
>>> from pyspark.sql import Row
>>> df = spark.createDataFrame([('Tom', 80), (None, 60), ('Alice', None)], ["name", "height"])
>>> df.select(df.name).orderBy(df.name.asc_nulls_last()).collect()
[Row(name='Alice'), Row(name='Tom'), Row(name=None)]

between()

挑选制定范围的列

>>> df.select(df.name, df.age.between(2, 4)).show()
+-----+---------------------------+
| name|((age >= 2) AND (age <= 4))|
+-----+---------------------------+
|Alice|                       true|
|  Bob|                      false|
+-----+---------------------------+

cast(dataType)

修改列的数据类型

>>> df.select(df.age.cast("string").alias('ages')).collect()
[Row(ages='2'), Row(ages='5')]
>>> df.select(df.age.cast(StringType()).alias('ages')).collect()
[Row(ages='2'), Row(ages='5')]

contains(other)

包含其他元素。 返回基于字符串匹配的布尔列。

>>> df.filter(df.name.contains('o')).collect()
[Row(age=5, name='Bob')]

desc()

类似于asc(),这里不再赘述。

desc_nulls_first()、desc_nulls_last()

类似于asc_nulls_first()、asc_nulls_last(),这里不再赘述。

endswith(other)、startswith(other)

直接看程序实例。

>>> df.filter(df.name.endswith('ice')).collect()
[Row(age=2, name='Alice')]
>>> df.filter(df.name.startswith('Al')).collect()
[Row(age=2, name='Alice')]

isNotNull()、isNull()

检查某列是否为空

>>> from pyspark.sql import Row
>>> df = spark.createDataFrame([Row(name='Tom', height=80), Row(name='Alice', height=None)])
>>> df.filter(df.height.isNotNull()).collect()
[Row(height=80, name='Tom')]
>>> df = spark.createDataFrame([Row(name='Tom', height=80), Row(name='Alice', height=None)])
>>> df.filter(df.height.isNull()).collect()
[Row(height=None, name='Alice')]

isin(*cols)

如果参数的计算值包含此表达式的值,则返回为true的布尔表达式。

>>>col=[('Tom', 80), ('Alice', 90),("Tan",100),("Jan",70)]
>>>df = spark.createDataFrame(col, ["name", "height"])
>>>df[df.name.isin(["Tan","Tom"])].collect()
[Row(name='Tom', height=80), Row(name='Tan', height=100)]
>>>df[(df.height.isin([100,70])) & (df.name=="Tan")].collect()
[Row(name='Tan', height=100)]
>>>df.filter((df.height.isin([100,70])) & (df.name=="Tan")).collect()
[Row(name='Tan', height=100)]

like(other)

跟sql中的like用法类似

>>> df.filter(df.name.like('Al%')).collect()
[Row(age=2, name='Alice')]

substr(startPos, length)

返回某列的指定长度的字串

>>> df.select(df.name.substr(1, 3).alias("col")).collect()
[Row(col='Ali'), Row(col='Bob')]

when(condition, value)

计算条件列表,并返回多个可能的结果表达式中的一个。 如果未调用Column.otherwise(),则为不匹配的条件返回None。

>>> from pyspark.sql import functions as F
>>> df.select(df.name, F.when(df.age > 4, 1).when(df.age < 3, -1).otherwise(0)).show()
+-----+------------------------------------------------------------+
| name|CASE WHEN (age > 4) THEN 1 WHEN (age < 3) THEN -1 ELSE 0 END|
+-----+------------------------------------------------------------+
|Alice|                                                          -1|
|  Bob|                                                           1|
+-----+------------------------------------------------------------+

pyspark.sql.Column的基本用法到此就介绍完了。

发布了24 篇原创文章 · 获赞 2 · 访问量 1186

猜你喜欢

转载自blog.csdn.net/qq_40176087/article/details/100061592