七、Column

  1. Column 代表了DataFrame 的一列

  2. 有两种创建Column 的方式:

    • 通过DataFrame 的列名来创建:

      1. df.colName
      2. df['colName']
    • 通过Column 表达式来创建:

      1. df.colName+1
      2. 1/df['colName']

7.1 方法

  1. .alias(*alias, **kwargs):创建一个新列,它给旧列一个新的名字(或者一组名字,如explode 表达式会返回多列)

    • 它是name()的别名
  • 参数:

    • alias:列的别名
    • metadata:一个字符串,存储在列的metadata 属性中
  • 示例:

    1. df.select(df.age.alias("age2"))
    2. # 结果为: [Row(age2=2), Row(age2=5)]
    3. df.select(df.age.alias("age3",metadata={'max': 99})
    4. ).schema['age3'].metadata['max']
    5. # 结果为: 99
  1. 排序:

    • .asc():创建一个新列,它是旧列的升序排序的结果
    • .desc():创建一个新列,它是旧列的降序排序的结果
  2. .astype(dataType):创建一个新列,它是旧列的数值转换的结果

    • 它是.cast() 的别名
  3. .between(lowerBound, upperBound):创建一个新列,它是一个布尔值。如果旧列的数值在[lowerBound, upperBound](闭区间)之内,则为True

  4. 逻辑操作:返回一个新列,是布尔值。other 为另一Column

    • .bitwiseAND(other):二进制逻辑与
    • .bitwiseOR(other):二进制逻辑或
    • .bitwiseXOR(other):二进制逻辑异或
  5. 元素抽取:

    • .getField(name):返回一个新列,是旧列的指定字段组成。

      此时要求旧列的数据是一个StructField(如Row

      • 参数:

        • name:一个字符串,是字段名
      • 示例:

        1. df = sc.parallelize([Row(r=Row(a=1, b="b"))]).toDF()
        2. df.select(df.r.getField("b"))
        3. #或者
        4. df.select(df.r.a)
    • .getItem(key):返回一个新列,是旧列的指定位置(列表),或者指定键(字典)组成。

      • 参数:

        • key:一个整数或者一个字符串
      • 示例:

        1. df = sc.parallelize([([1, 2], {"key": "value"})]).toDF(["l", "d"])
        2. df.select(df.l.getItem(0), df.d.getItem("key"))
        3. #或者
        4. df.select(df.l[0], df.d["key"])
  6. 判断:

    • .isNotNull():返回一个新列,是布尔值。表示旧列的值是否非null

    • .isNull():返回一个新列,是布尔值。表示旧列的值是否null

    • .isin(*cols):返回一个新列,是布尔值。表示旧列的值是否在cols

      • 参数:

        • cols:一个列表或者元组
      • 示例:

        1. df[df.name.isin("Bob", "Mike")]
        2. df[df.age.isin([1, 2, 3])]
    • like(other):返回一个新列,是布尔值。表示旧列的值是否like other。它执行的是SQLlike 语义

      • 参数:

        • other:一个字符串,是SQL like 表达式
      • 示例:

        1. df.filter(df.name.like('Al%'))
    • rlike(other):返回一个新列,是布尔值。表示旧列的值是否rrlike other。它执行的是SQLrlike 语义

      • 参数:

        • other:一个字符串,是SQL rlike 表达式
  7. 字符串操作:other 为一个字符串。

    • .contains(other):返回一个新列,是布尔值。表示是否包含other

    • .endswith(other):返回一个新列,是布尔值。表示是否以other 结尾。

      示例:

      1. df.filter(df.name.endswith('ice'))
    • .startswith(other):返回一个新列,是布尔值。表示是否以other 开头。

    • .substr(startPos, length):返回一个新列,它是旧列的子串

      • 参数:

        • startPos:子串开始位置(整数或者Column
        • length:子串长度(整数或者Column
  8. .when(condition, value):返回一个新列。

    • 对条件进行求值,如果满足条件则返回value,如果不满足:

      • 如果有.otherwise() 调用,则返回otherwise 的结果
      • 如果没有.otherwise() 调用,则返回None
    • 参数:

      • condition:一个布尔型的Column 表达式
      • value:一个字面量值,或者一个Column 表达式
    • 示例:

      1. from pyspark.sql import functions as F
      2. df.select(df.name, F.when(df.age > 4, 1).when(df.age < 3, -1).otherwise(0))
    • .otherwise(value)value 为一个字面量值,或者一个Column 表达式