Pyspark数据帧运算符“;不在“中”;
我想把这个从R改写成Pyspark,有什么好看的建议吗Pyspark数据帧运算符“;不在“中”;,pyspark,Pyspark,我想把这个从R改写成Pyspark,有什么好看的建议吗 array <- c(1,2,3) dataset <- filter(!(column %in% array)) array在pyspark中,您可以这样做: array = [1, 2, 3] dataframe.filter(dataframe.column.isin(array) == False) 或使用二进制NOT运算符: dataframe.filter(~dataframe.column.isin(array
array <- c(1,2,3)
dataset <- filter(!(column %in% array))
array在pyspark中,您可以这样做:
array = [1, 2, 3]
dataframe.filter(dataframe.column.isin(array) == False)
或使用二进制NOT运算符:
dataframe.filter(~dataframe.column.isin(array))
略有不同的语法和“日期”数据集:
toGetDates={'2017-11-09', '2017-11-11', '2017-11-12'}
df= df.filter(df['DATE'].isin(toGetDates) == False)
以运算符~为例,表示相反:
您还可以循环阵列和过滤器:
array = [1, 2, 3]
for i in array:
df = df.filter(df["column"] != i)
*
不需要。因此:
list = [1, 2, 3]
dataframe.filter(~dataframe.column.isin(list))
您可以使用.subtract()
好友
例如:
df1 = df.select(col(1),col(2),col(3))
df2 = df.subtract(df1)
这样,df2将被定义为除df1之外的所有df。数组中的*
的任务是什么?*变量是python语法,用于扩展数组以将其元素按顺序一次转储到函数参数中。dataframe.column
区分大小写!或者,您可以使用字典语法dataframe[column]
,它不是:)@rjurney No。=
操作符在这里所做的是调用列返回的列
结果上重载的\uuuuueq\uu
方法。它重载以返回另一列结果,以测试与另一个参数是否相等(在本例中,False
)。is
操作符测试对象标识,即对象是否在内存中的同一位置。如果在此处使用is
,它将始终失败,因为常量False
与列
不在同一内存位置。此外,您不能重载is
。使用*显示列表在这里没有任何区别。你可以只使用isin(array)
,它工作得很好。我不建议在大数据应用程序中使用它…这意味着你需要遍历整个数据集树的时间…如果你的图像中有几个TerraByte要处理,这将是巨大的否,因为Spark内部优化此过滤器,使其在1倍时间内完成此过滤器。那么它应该可以。。。直到新的突破性改变火花更新或框架切换。。。3行而不是1行+隐藏优化对我来说似乎仍然不是一个好模式…无意冒犯,但我仍然建议大家避免使用它,这不是公认的答案吗?当我们有专门用于否定的~
时,为什么要用这个不那么明显的词来理解==False
list = [1, 2, 3]
dataframe.filter(~dataframe.column.isin(list))
df1 = df.select(col(1),col(2),col(3))
df2 = df.subtract(df1)