Python Pyspark:具有.isNotNull()和其他2个条件的筛选器函数错误
我试图在Pyspark中过滤我的数据帧,我想将结果写入拼花文件,但每次都会出错,因为我的Python Pyspark:具有.isNotNull()和其他2个条件的筛选器函数错误,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我试图在Pyspark中过滤我的数据帧,我想将结果写入拼花文件,但每次都会出错,因为我的isNotNull()条件有问题。我在filter函数中有3个条件,如果其中一个条件为true,则结果行应写入拼花地板文件中 我尝试了使用或和|的不同版本,以及使用isNotNull()的不同版本,但没有任何帮助 这是我尝试过的一个例子: 从pyspark.sql.functions导入col 测向滤波器( (df['col1']=='attribute1')| (df['col1']=='attribute
isNotNull()
条件有问题。我在filter
函数中有3个条件,如果其中一个条件为true,则结果行应写入拼花地板文件中
我尝试了使用或和|的不同版本,以及使用isNotNull()
的不同版本,但没有任何帮助
这是我尝试过的一个例子:
从pyspark.sql.functions导入col
测向滤波器(
(df['col1']=='attribute1')|
(df['col1']=='attribute2')|
(df.where(col(“col2”).isNotNull())
).write.save(“新拼花地板、拼花地板”)
这是我尝试的另一个示例,但在该示例中,它忽略了带有attribute1
或attribute2
的行:
df.filter(
(df['col1']=='attribute1')|
(df['col1']=='attribute2')|
(df['col2'].isNotNull())
).write.save(“新拼花地板、拼花地板”)
这是错误消息:
AttributeError:“DataFrame”对象没有属性“\u get\u object\u id”
我希望你能帮助我,我对这个话题还不熟悉。非常感谢你 首先,关于col1
过滤器,您可以使用isin
这样做:
df['col1'].isin(['attribute1','attribute2'])
然后:
df.filter((df['col1'].isin(['atribute1','atribute2']))|(df['col2'].isNotNull())
好的,dataframe.column.isNotNull()应该可以工作,但是我没有样本数据来测试它,对不起。首先,关于col1
过滤器,您可以使用isin
这样做:
df['col1'].isin(['attribute1','attribute2'])
然后:
df.filter((df['col1'].isin(['atribute1','atribute2']))|(df['col2'].isNotNull())
好的,dataframe.column.isNotNull()应该可以工作,但是我没有样本数据来测试它,很抱歉。请参见下面的示例:
from pyspark.sql import functions as F
df = spark.createDataFrame([(3,'a'),(5,None),(9,'a'),(1,'b'),(7,None),(3,None)], ["id", "value"])
df.show()
原始数据帧
+---+-----+
| id|value|
+---+-----+
| 3| a|
| 5| null|
| 9| a|
| 1| b|
| 7| null|
| 3| null|
+---+-----+
现在我们进行过滤器:
df = df.filter( (df['id']==3)|(df['id']=='9')|(~F.isnull('value')))
df.show()
+---+-----+
| id|value|
+---+-----+
| 3| a|
| 9| a|
| 1| b|
| 3| null|
+---+-----+
你看
行(3,'a')
和行(3,null)
被选中,因为'df['id']==3'
行(9,'a')
被选中,因为'df['id']==9'
选择了行(1,'b')
,因为~F.isnull('value')
,但未选择行(5,null)
和行(7,null)
请参见下面的示例:
from pyspark.sql import functions as F
df = spark.createDataFrame([(3,'a'),(5,None),(9,'a'),(1,'b'),(7,None),(3,None)], ["id", "value"])
df.show()
原始数据帧
+---+-----+
| id|value|
+---+-----+
| 3| a|
| 5| null|
| 9| a|
| 1| b|
| 7| null|
| 3| null|
+---+-----+
现在我们进行过滤器:
df = df.filter( (df['id']==3)|(df['id']=='9')|(~F.isnull('value')))
df.show()
+---+-----+
| id|value|
+---+-----+
| 3| a|
| 9| a|
| 1| b|
| 3| null|
+---+-----+
你看
行(3,'a')
和行(3,null)
被选中,因为'df['id']==3'
行(9,'a')
被选中,因为'df['id']==9'
选择了行(1,'b')
,因为~F.isnull('value')
,但未选择行(5,null)
和行(7,null)
第二种方法很接近,我在(df['col2'].isNotNull()
)后面看到了额外的单引号。这可能是抛出错误。尝试这个df.filter((df['col1']=='attribute1')|(df['col1']='attribute2')|(df['col2'].isNotNull()).write.save(“新的拼花地板”)
抱歉,我想我把它删掉了,因为我认为那只是一个打字错误。在第二个片段中,原始帖子有(df['col2'].isNotNull())
。你接近第二种方法了,我在(df['col2'].isNotNull()
之后看到了额外的单引号。可能是抛出了错误。试试这个df.filter((df['col1'='attribute1'))|(df['col1']=='attribute2')|(df['col2'].isNotNull()).write.save(“new_parquet.parquet”)
抱歉,我想我把它删掉了,因为我认为那只是一个打字错误。在第二个片段中,原始帖子有(df['col2'].isNotNull())
。