我使用的PySpark Pandas DataFrame看起来类似于下图:
| col1 | col2 | col3 |
|------|----------------------|------|
| 1 |'C:\windows\a\folder1'| 3 |
| 2 |'C:\windows\a\folder2'| 4 |
| 3 |'C:\windows\b\folder1'| 4 |
| 4 |'C:\unix\b\folder2' | 5 |
| 5 |'C:\unix\a\folder3' | 4 |
整个数据集相当大(大约55百万行),因此本示例仅为部分。
我尝试根据两个参数从中删除行:
- col 2是Windows服务器的路径,并且包含文件夹“a”
- col 3等于不等于3
最终结果应该是这样的:
| col1 | col2 | col3 |
|------|----------------------|------|
| 1 |'C:\windows\a\folder1'| 3 |
| 3 |'C:\windows\b\folder1'| 4 |
| 4 |'C:\unix\b\folder2' | 5 |
| 5 |'C:\unix\a\folder3' | 4 |
注意:由于它是Unix服务器,因此保留5;由于col 3值为3,因此保留1
由于ps.df.drop()
函数不能根据索引删除数据,所以我尝试使用ps.df.filter
过滤掉冗余数据。
然而,当我只使用第一个参数测试它时,它找不到任何值:
df.filter(like='\\windows\\a\\', axis=0)
Out[1]:
| col1 | col2 | col3 |
|-------|-------|-------|
| blank | blank | blank |
要检查DataFrame不是我编写的问题:
df[ df.col2.str.contains('\\windows\\a\\', regex=False) ]
Out[2]:
| col1 | col2 | col3 |
|------|----------------------|------|
| 1 |'C:\windows\a\folder1'| 3 |
我还尝试了ps.sql()
函数,但得到了与df.filter()
相同的结果。
我不想在我的数据集中使用df.col2.str.contains()
函数,因为它对如此大的数据集效率不高。
有人能告诉我为什么df.filter
会失败,以及我如何才能在一个有效的庄园删除请求的列吗?
1条答案
按热度按时间z4iuyo4d1#
to_spark()
将此 Dataframe 转换为spark Dataframe 。like
根据给定的条件进行过滤。