文章目录
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的基本用法到此就介绍完了。