相关疑难解决方法(0)

使用isin排除过滤pyspark数据帧

我试图获取数据框中的所有行,其中列值不在列表中(因此通过排除进行过滤).

举个例子:

df = sqlContext.createDataFrame([('1','a'),('2','b'),('3','b'),('4','c'),('5','d')]
,schema=('id','bar'))
Run Code Online (Sandbox Code Playgroud)

我得到了数据框:

+---+---+
| id|bar|
+---+---+
|  1|  a|
|  2|  b|
|  3|  b|
|  4|  c|
|  5|  d|
+---+---+
Run Code Online (Sandbox Code Playgroud)

我只想排除bar所在的行('a'或'b').

使用SQL表达式字符串,它将是:

df.filter('bar not in ("a","b")').show()
Run Code Online (Sandbox Code Playgroud)

有没有办法在不使用SQL表达式的字符串或一次排除一个项目的情况下执行此操作?

编辑:

我可能有一个列表,['a','b'],我想要使用的排除值.

python apache-spark pyspark pyspark-sql

21
推荐指数
4
解决办法
7万
查看次数

Pyspark:如何从collect_set中删除项目?

在以下数据框中:

from pyspark.sql import functions as F
df = sqlContext.createDataFrame([
    ("a", "code1", "name"),
    ("a", "code1", "name2"),
    ("a", "code2", "name2"),
], ["id", "code", "name"])

df.show()
Run Code Online (Sandbox Code Playgroud)

您可以运行此命令来获取不同值的列表:

df.groupby("id").agg(F.collect_set("code")).show()

+---+-----------------+
| id|collect_set(code)|
+---+-----------------+
|  a|   [code2, code1]|
+---+-----------------+
Run Code Online (Sandbox Code Playgroud)

如何删除上述collect_set中的项目?例如如何删除'code2'

set apache-spark apache-spark-sql pyspark

5
推荐指数
1
解决办法
8110
查看次数