|
我查到这样一篇文章《Pyspark-dataframe使用22字诀》,我看到有这么一段代码:
- from pyspark.sql import functions as fn
- 1. 查找: 根据需要选择列按条件进行过滤
- test = spark.createDataFrame([['a', 0,2], ['b', 0, 0], ['c', 4, 4],
- ['c', 0,2], ['c', 1,0]], schema=['a', 'b', 'c'])
- test.show()
- # 按条件进行过滤可以选择filter也可以选择where
- test.select('a').filter(test['a'] != 2).show()
- test.filter((test['a'] != 0) | (test['c'] != 0)).show()
- # 多次filter条件,按区间选择值,对列按照sql语句进行选择
- test.filter(test.b.betwen(1,4)).filter("a like 'a%'").show()
- # 这里需要注意的事,如果通过withcolumn创建列了新的列需要通过function.col函数来指定列
- test.withColumn('aa',fn.size(test['a'])).filter((fn.col('aa') > 1))
- # 也可以通过选择条件赋值给新的列在进行过滤
- test.withColumn("aa", when((test['a'] == 0)
- && (test['b'] == 0, 0).otherwise(1)).filter(fn.col('aa') == 1)
- # 或者可以创建一个临时表,在临时表上使用sql
- test.createOrReplaceTempView("test_df")
- spark.sql("select distinct(a) from test_df").show()
-
- 2. 修改/增加新列:withcolumn, 比如对string通过正则表达式进行过滤
- test = test.withcolumn('aa', fn.regexp_replace('query', "[^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a]", ""))
- 3. 删除一列: drop
- test = test.drop('a')
- # 也可以直接选择自己需要的一些列
- test = test.select(['a', 'b'])
复制代码 修改操作,包括修改表结构,看来都不是in-place的,而是修改以后返回一个新的数据集,应该是为了确保数据都是immutable的
|
|
共 5 个关于本帖的回复 最后回复于 2021-9-1 17:03