【发布时间】:2017-03-10 07:01:57
【问题描述】:
我想将它从 R 重写为 Pyspark,有什么好看的建议吗?
array <- c(1,2,3)
dataset <- filter(!(column %in% array))
【问题讨论】:
标签: pyspark
我想将它从 R 重写为 Pyspark,有什么好看的建议吗?
array <- c(1,2,3)
dataset <- filter(!(column %in% array))
【问题讨论】:
标签: pyspark
您可以使用.subtract() 好友。
例子:
df1 = df.select(col(1),col(2),col(3))
df2 = df.subtract(df1)
这样,df2 将被定义为所有不是 df1 的 df。
【讨论】:
在 pyspark 中你可以这样做:
array = [1, 2, 3]
dataframe.filter(dataframe.column.isin(array) == False)
或者使用二元非运算符:
dataframe.filter(~dataframe.column.isin(array))
【讨论】:
* 在*array 中的工作是什么?
dataframe.column 区分大小写!或者,您可以使用字典语法dataframe[column],这不是:)
== 操作符在这里所做的是在 dataframe.column.isin(*array) 返回的 Column 结果上调用重载的 __eq__ 方法。这被重载以返回另一个列结果以测试与另一个参数的相等性(在本例中为False)。 is 运算符测试对象身份,即对象是否实际上在内存中的相同位置。如果你在这里使用is,它总是会失败,因为常量False 不会与Column 位于相同的内存位置。此外,您不能重载is。
isin(array),它工作得很好。
* 不需要。所以:
list = [1, 2, 3]
dataframe.filter(~dataframe.column.isin(list))
【讨论】:
你也可以循环数组和过滤器:
array = [1, 2, 3]
for i in array:
df = df.filter(df["column"] != i)
【讨论】:
取运算符~,表示相反:
df_filtered = df.filter(~df["column_name"].isin([1, 2, 3]))
【讨论】:
~ 时,为什么要使用这个不太明显的== False?
* 没用
略有不同的语法和“日期”数据集:
toGetDates={'2017-11-09', '2017-11-11', '2017-11-12'}
df= df.filter(df['DATE'].isin(toGetDates) == False)
【讨论】:
df_result = df[df.column_name.isin([1, 2, 3]) == False]
【讨论】: