alo*_*mor 1 data-cleaning pyspark
我对Pyspark来说还是比较新的.我使用的是2.1.0版.我正在尝试清理更大的数据集上的一些数据.我已成功使用了几种技术,如"dropDuplicates"以及子集和sql函数(distinct,count等).
然后我遇到了dropna,我认为这可能会简化问题.但是我不明白为什么使用dropna后第3行和第6行仍然存在.例如:
df = spark.createDataFrame([(1, 'Peter', 1.79, 28,'M', 'Tiler'),
(2, 'Fritz', 1.78, 45,'M', None),
(3, 'Florence', 1.75, None, None, None),
(4, 'Nicola',1.6, 33,'F', 'Dancer'),
(5, 'Gregory', 1.8, 54,'M', 'Teacher'),
(6, 'Steven', 1.82, None, 'M', None),
(7, 'Dagmar', 1.7, 42,'F', 'Nurse'),]
, ['id', 'Name', 'Height', 'Age', 'Gender', 'Occupation'])
df.show()
df.dropna(thresh=2)
df.show()
Run Code Online (Sandbox Code Playgroud)
输出:
+---+--------+------+----+------+----------+
| id| Name|Height| Age|Gender|Occupation|
+---+--------+------+----+------+----------+
| 1| Peter| 1.79| 28| M| Tiler|
| 2| Fritz| 1.78| 45| M| null|
| 3|Florence| 1.75|null| null| null|
| 4| Nicola| 1.6| 33| F| Dancer|
| 5| Gregory| 1.8| 54| M| Teacher|
| 6| Steven| 1.82|null| M| null|
| 7| Dagmar| 1.7| 42| F| Nurse|
+---+--------+------+----+------+----------+
+---+--------+------+----+------+----------+
| id| Name|Height| Age|Gender|Occupation|
+---+--------+------+----+------+----------+
| 1| Peter| 1.79| 28| M| Tiler|
| 2| Fritz| 1.78| 45| M| null|
| 3|Florence| 1.75|null| null| null|
| 4| Nicola| 1.6| 33| F| Dancer|
| 5| Gregory| 1.8| 54| M| Teacher|
| 6| Steven| 1.82|null| M| null|
| 7| Dagmar| 1.7| 42| F| Nurse|
+---+--------+------+----+------+----------+
Run Code Online (Sandbox Code Playgroud)
有人可以建议为什么不删除行?
pyspark 示例根据我假设的用法显示正确的计数.
# threshold
self.assertEqual(self.spark.createDataFrame(
[(u'Alice', None, 80.1)], schema).dropna(thresh=2).count(),
1)
self.assertEqual(self.spark.createDataFrame(
[(u'Alice', None, None)], schema).dropna(thresh=2).count(),
0)
Run Code Online (Sandbox Code Playgroud)
首先,na创建一个新的数据帧,然后将其分配给新的df名称,第二个,指定子集以检查要检查哪些列的空值
df2 = df.dropna(thresh=2,subset=('Age','Gender','Occupation'))
df2.show()
Run Code Online (Sandbox Code Playgroud)
输出:
+---+-------+------+---+------+----------+
| id| Name|Height|Age|Gender|Occupation|
+---+-------+------+---+------+----------+
| 1| Peter| 1.79| 28| M| Tiler|
| 2| Fritz| 1.78| 45| M| null|
| 4| Nicola| 1.6| 33| F| Dancer|
| 5|Gregory| 1.8| 54| M| Teacher|
| 7| Dagmar| 1.7| 42| F| Nurse|
+---+-------+------+---+------+----------+
Run Code Online (Sandbox Code Playgroud)
编辑:顺便说一句,thresh=2单独不起作用,因为thresh意味着删除少于thresh(即在这种情况下为2)非空值的行,但第3行有id,name和height,即总共3个非空值和第6行有4个非空值,因此它们不符合thresh=2标准.你可以试试thresh=5
| 归档时间: |
|
| 查看次数: |
8863 次 |
| 最近记录: |