pyspark API

Pyspark官方文档

1.select(*cols)

投影一组表达式并返回一个新的DataFrame。这里的表达式指的应该是spark计算表达式。

cols - 表列明列表(String) 或 表达式 (Column)。如果列明是 "*" 则标识在这个DataFrame中包含所有列。

>>> df.select('*').collect()
[Row(age=2, name='Alice'), Row(age=5, name='Bob')]
>>> df.select('name', 'age').collect()
[Row(name='Alice', age=2), Row(name='Bob', age=5)]
>>> df.select(df.name, (df.age + 10).alias('age')).collect()
[Row(name='Alice', age=12), Row(name='Bob', age=15)]

2.selectExpr(*expr)

投影一组 SQL表达式 并返回一个新的DataFrame。这里的SQL表达式,应该是指在编写sql时使用的计算表达式。
selectExpr 是 select 的变种,selectExpr 接受SQL 表达式。

>>> df.selectExpr("age * 2", "abs(age)").collect()
[Row((age * 2)=4, abs(age)=2), Row((age * 2)=10, abs(age)=5)]
>>> df.selectExpr("age * 2", "case when age > 28 then '老年人' else 'Baby' end as title").collect()

3.dropDuplicates(subset=None)

返回一个无重复行的DataFrame,同时可以按照指定的某些列来进行去重。
drop_duplicates()是dropDuplicates()的别名。

>>> from pyspark.sql import Row
>>> df = sc.parallelize([ \
...     Row(name='Alice', age=5, height=80), \
...     Row(name='Alice', age=5, height=80), \
...     Row(name='Alice', age=10, height=80)]).toDF()
>>> df.dropDuplicates().show()
+---+------+-----+
|age|height| name|
+---+------+-----+
|  5|    80|Alice|
| 10|    80|Alice|
+---+------+-----+
>>> df.dropDuplicates(['name', 'height']).show()
# 根据name 和 height 列去重
+---+------+-----+
|age|height| name|
+---+------+-----+
|  5|    80|Alice|
+---+------+-----+

dropna(how='any', thresh=None, subset=None)

过滤掉包含null值得行。

  • how:有两个值 'any' 和 'all'。any 表示只要行中有任何一列是null值就被过滤掉。all 表示只有这行中得所有列值都为null时才被删除。
  • thresh:默认不启用,表示某行中低于thresh个列得值不为null时,这行将被删除,将覆盖how 参数。
  • subset:前面两列起作用的表列范围,没有指定就是所有列,指定之后就代表在指定列中进行how 和 thresh 计算。
>>> df4.na.drop().show()
+---+------+-----+
|age|height| name|
+---+------+-----+
| 10|    80|Alice|
+---+------+-----+

4.collect_list(col)

聚合函数:返回一个重复对象列表。

注意:这个函数具有不去定性,意思是返回的集合中对象的顺序可能是不准确的,因为在在收集结果是的顺序是不确定的。

>>> df2 = spark.createDataFrame([(2,), (5,), (5,)], ('age',))
>>> df2.agg(collect_list('age')).collect()
[Row(collect_list(age)=[2, 5, 5])]

5.collect_set(col)

返回去重后的集合

同样不能确定返回顺序

>>> df2 = spark.createDataFrame([(2,), (5,), (5,)], ('age',))
>>> df2.agg(collect_set('age')).collect()
[Row(collect_set(age)=[5, 2])]

6.concat(*cols)

连接多个列到一个单独列中。这个方法支持string、二进制、数组列。

>>> df = spark.createDataFrame([('abcd','123')], ['s', 'd'])
>>> df.select(concat(df.s, df.d).alias('s')).collect()
[Row(s='abcd123')]
>>> df = spark.createDataFrame([([1, 2], [3, 4], [5]), ([1, 2], None, [3])], ['a', 'b', 'c'])
>>> df.select(concat(df.a, df.b, df.c).alias("arr")).collect()
[Row(arr=[1, 2, 3, 4, 5]), Row(arr=None)]

7.concat_ws(sep, *cols)

通过指定的分隔符连接多列为一列。

>>> df = spark.createDataFrame([('abcd','123')], ['s', 'd'])
>>> df.select(concat_ws('-', df.s, df.d).alias('s')).collect()
[Row(s='abcd-123')]

转载于:https://www.jianshu.com/p/abd3a898b75b

猜你喜欢

转载自blog.csdn.net/weixin_33875564/article/details/91281916