我尝试在dataframe
中过滤我的Pyspark
,但我想将结果写入新的parquet-File
中,但是我总是遇到错误,因为我的东西出了问题isNotNull()
-条件。我为filter function
有3个条件,并且是其中之一,给出的行应以新的parquet-file
形式写出。
我尝试使用OR
或|
的不同版本,以及具有isNotNull()
功能的不同版本,但没有任何帮助。
这是我绑的一个例子:
from pyspark.sql.functions import col
df.filter((df['col1']=='attribute1')|(df['col1']=='attribute2')|(df.where(col("col2").isNotNull())))\
.write \
.save("new_parquet.parquet")
这是我绑定的另一个示例,但是在该示例中,它忽略了带有attribute1
或attribute2
的行:
df.filter((df['col1']=='attribute1')|(df['col1']=='attribute2')|(df['col2'].isNotNull()'))\
.write \
.save("new_parquet.parquet")
这是错误消息:
AttributeError:“ DataFrame”对象没有属性“ _get_object_id”
我希望您能为我提供帮助,我是该主题的新手。非常感谢!
答案 0 :(得分:0)
首先,关于col1
过滤器,您可以像这样使用isin
进行过滤:
df['col1'].isin(['attribute1', 'attribute2'])
然后:
df.filter((df['col1'].isin(['atribute1', 'atribute2']))|(df['col2'].isNotNull()))
AFAIK,dataframe.column.isNotNull()应该可以工作,但是抱歉,我没有用于测试的示例数据。
答案 1 :(得分:0)
请参见以下示例:
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()
原始DataFrame
+---+-----+
| 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|
+---+-----+
所以您看到
row(3, 'a')
和row(3, null)
是因为'df ['id'] == 3'row(9, 'a')
是因为`df ['id'] == 9'row(1, 'b')
因~F.isnull('value')
而被选中,但未选择row(5, null)
和row(7, null)
。