class pyspark.sql.Column
DataFrame中的一列
(1.3版本新增)
df.colName
df["colName"]
df.colName + 1
1 / df.colName
alias(*alias)
对列进行重命名
(1.3版本新增)
>>> df.select(df.age.alias("age2")).collect()
[Row(age2=2), Row(age2=5)]
asc()
基于指定列返回一个升序表达式
astype(dataType)
转换列的数据类型,跟cast()是同一个函数
(1.4版本新增)
between(lowerBound, upperBound)
筛选出某个范围内的值
>>> df.select(df.name, df.age.between(2, 4)).show()
+-----+---------------------------+
| name|((age >= 2) AND (age <= 4))|
+-----+---------------------------+
|Alice| true|
| Bob| false|
+-----+---------------------------+
bitwiseAND(other)
按位"与"
bitwiseOR(other)
按位"或"
bitwiseXOR(other)
按位"异或"
cast(dataType)
转换列的数据类型
(1.3版本新增)
>>> df.select(df.age.cast("string").alias('ages')).collect()
[Row(ages=u'2'), Row(ages=u'5')]
>>> df.select(df.age.cast(StringType()).alias('ages')).collect()
[Row(ages=u'2'), Row(ages=u'5')]
desc()
基于指定列返回一个降序表达式
endswith(other)
判断列中每个值是否以指定字符结尾
>>> df.select(df.ip.endswith('0').alias('endswithZero')).show(10)
+------------+
|endswithZero|
+------------+
| false|
| null|
| false|
| false|
| false|
| false|
| false|
| false|
| false|
| false|
+------------+
getField(name)
从StructField中取出嵌套的Row中的值
(1.3版本新增)
>>> from pyspark.sql import Row
>>> df = sc.parallelize([Row(r=Row(a=1, b="b"))]).toDF()
>>> df.select(df.r.getField("b")).show()
+---+
|r.b|
+---+
| b|
+---+
>>> df.select(df.r.a).show()
+---+
|r.a|
+---+
| 1|
+---+
getItem(key)
如果列中的值为list或dict,则根据index或key取相应的值
(1.3版本新增)
>>> df = sc.parallelize([([1, 2], {"key": "value"})]).toDF(["l", "d"])
>>> df.select(df.l.getItem(0), df.d.getItem("key")).show()
+----+------+
|l[0]|d[key]|
+----+------+
| 1| value|
+----+------+
>>> df.select(df.l[0], df.d["key"]).show()
+----+------+
|l[0]|d[key]|
+----+------+
| 1| value|
+----+------+
isNotNull()
判断列中的值是否不为空
isNull()
判断列中的值是否为空
isin(*cols)
判断列中的值是否在一个数组或者指定的列中
(1.5版本新增)
>>> df.select(df.limit(100).ip.isin(df.ip).alias('ifinList')).show()
+--------+
|ifinList|
+--------+
| true|
| null|
| true|
| true|
| true|
| true|
| true|
+--------+
>>> df.select(df.limit(100).ip.isin(['192.168.250.242','192.168.43.81']).alias('ifinList')).show()
+--------+
|ifinList|
+--------+
| true|
| null|
| false|
| false|
| false|
| false|
| false|
| false|
| false|
| true|
| null|
+--------+
like(expression)
判断列中的值是否满足相似条件,判断条件跟sql语法相同,支持通配符
>>> df.select(df.ip.like('222.94%').alias('ifLike')).show()
+------+
|ifLike|
+------+
| true|
| null|
| false|
| false|
| false|
| false|
| false|
+------+
name(*alias)
跟alias()是同一个函数
otherwise(value)
若列中的值不满足when中的判断条件,则返回otherwise传入的值
用法参考 pyspark.sql.functions.when()
(1.4版本新增)
>>> from pyspark.sql import functions as F
>>> df.select(df.name, F.when(df.age > 3, 1).otherwise(0)).show()
+-----+-------------------------------------+
| name|CASE WHEN (age > 3) THEN 1 ELSE 0 END|
+-----+-------------------------------------+
|Alice| 0|
| Bob| 1|
+-----+-------------------------------------+
参数:
over(window)
定义窗口列
(1.4版本新增)
>>> from pyspark.sql import Window
>>> window = Window.partitionBy("name").orderBy("age").rowsBetween(-1, 1)
>>> from pyspark.sql.functions import rank, min
>>>
参数:
返回值:
rlike(other)
判断列中的值是否满足相似条件,判断条件跟sql语法相同,支持正则
>>> df.select(df.ip.rlike('(\d{1,3}\.){3}\d{1,3}').alias('isLike')).show()
+------+
|isLike|
+------+
| true|
| null|
| true|
| true|
| true|
| true|
| null|
| true|
+------+
startswith(other)
判断列中每个值是否以指定字符开头
substr(startPos, length)
对列中的值取字串
(1.3版本新增)
>>> df.select(df.name.substr(1, 3).alias("col")).collect()
[Row(col=u'Ali'), Row(col=u'Bob')]
参数:
- startPos ——– 起始位置
- length ——- 截取长度
when(condition, value)
对列中的值进行条件判断
(1.4版本新增)
>>> 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|
+-----+------------------------------------------------------------+
参数:
- condition ——– 判断条件
- value ——– 满足条件时的返回值