七、Column
Column
代表了DataFrame
的一列有两种创建
Column
的方式:通过
DataFrame
的列名来创建:df.colName
df['colName']
通过
Column
表达式来创建:df.colName+1
1/df['colName']
7.1 方法
.alias(*alias, **kwargs)
:创建一个新列,它给旧列一个新的名字(或者一组名字,如explode
表达式会返回多列)- 它是
name()
的别名
- 它是
参数:
alias
:列的别名metadata
:一个字符串,存储在列的metadata
属性中
示例:
df.select(df.age.alias("age2"))
# 结果为: [Row(age2=2), Row(age2=5)]
df.select(df.age.alias("age3",metadata={'max': 99})
).schema['age3'].metadata['max']
# 结果为: 99
排序:
.asc()
:创建一个新列,它是旧列的升序排序的结果.desc()
:创建一个新列,它是旧列的降序排序的结果
.astype(dataType)
:创建一个新列,它是旧列的数值转换的结果- 它是
.cast()
的别名
- 它是
.between(lowerBound, upperBound)
:创建一个新列,它是一个布尔值。如果旧列的数值在[lowerBound, upperBound]
(闭区间)之内,则为True
逻辑操作:返回一个新列,是布尔值。
other
为另一Column
.bitwiseAND(other)
:二进制逻辑与.bitwiseOR(other)
:二进制逻辑或.bitwiseXOR(other)
:二进制逻辑异或
元素抽取:
.getField(name)
:返回一个新列,是旧列的指定字段组成。此时要求旧列的数据是一个
StructField
(如Row
)参数:
name
:一个字符串,是字段名
示例:
df = sc.parallelize([Row(r=Row(a=1, b="b"))]).toDF()
df.select(df.r.getField("b"))
#或者
df.select(df.r.a)
.getItem(key)
:返回一个新列,是旧列的指定位置(列表),或者指定键(字典)组成。参数:
key
:一个整数或者一个字符串
示例:
df = sc.parallelize([([1, 2], {"key": "value"})]).toDF(["l", "d"])
df.select(df.l.getItem(0), df.d.getItem("key"))
#或者
df.select(df.l[0], df.d["key"])
判断:
.isNotNull()
:返回一个新列,是布尔值。表示旧列的值是否非null
.isNull()
:返回一个新列,是布尔值。表示旧列的值是否null
.isin(*cols)
:返回一个新列,是布尔值。表示旧列的值是否在cols
中参数:
cols
:一个列表或者元组
示例:
df[df.name.isin("Bob", "Mike")]
df[df.age.isin([1, 2, 3])]
like(other)
:返回一个新列,是布尔值。表示旧列的值是否like other
。它执行的是SQL
的like
语义参数:
other
:一个字符串,是SQL like
表达式
示例:
df.filter(df.name.like('Al%'))
rlike(other)
:返回一个新列,是布尔值。表示旧列的值是否rrlike other
。它执行的是SQL
的rlike
语义参数:
other
:一个字符串,是SQL rlike
表达式
字符串操作:
other
为一个字符串。.contains(other)
:返回一个新列,是布尔值。表示是否包含other
。.endswith(other)
:返回一个新列,是布尔值。表示是否以other
结尾。示例:
df.filter(df.name.endswith('ice'))
.startswith(other)
:返回一个新列,是布尔值。表示是否以other
开头。.substr(startPos, length)
:返回一个新列,它是旧列的子串参数:
startPos
:子串开始位置(整数或者Column
)length
:子串长度(整数或者Column
)
.when(condition, value)
:返回一个新列。对条件进行求值,如果满足条件则返回
value
,如果不满足:- 如果有
.otherwise()
调用,则返回otherwise
的结果 - 如果没有
.otherwise()
调用,则返回None
- 如果有
参数:
condition
:一个布尔型的Column
表达式value
:一个字面量值,或者一个Column
表达式
示例:
from pyspark.sql import functions as F
df.select(df.name, F.when(df.age > 4, 1).when(df.age < 3, -1).otherwise(0))
.otherwise(value)
:value
为一个字面量值,或者一个Column
表达式