(译) pyspark.sql.Column模块

class pyspark.sql.Column

DataFrame中的一列
(1.3版本新增)
#可以通过如下方式创建一个Column实例:
# 1. 从DataFrame中选取一列
df.colName
df["colName"]

# 2. 表达式创建
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|
+-----+-------------------------------------+
参数:
  • value ——– 值或列表达式

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
>>> # df.select(rank().over(window), min('age').over(window))
参数:
  • window ——– 一个窗口函数
返回值:
  • 列对象

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 ——– 满足条件时的返回值
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值