从pyspark数据帧中过滤负值

时间:2018-03-18 20:41:55

标签: dataframe filter pyspark

我有一个带有> 40列且具有混合值的spark数据帧。如何一次只从所有列中选择正值&过滤掉否定的?我访问了[Python Pandas: DataFrame filter negative values,但没有一个解决方案正在运作。我想在朴体公园中安装Naive Bayes,其中一个假设是所有特征必须是积极的。如何通过从我的功能中仅选择正值来为其准备数据?

1 个答案:

答案 0 :(得分:0)

假设您有一个像这样的数据框

data = [(0,-1,3,4,5, 'a'), (0,-1,3,-4,5, 'b'), (5,1,3,4,5, 'c'), 
        (10,1,13,14,5,'a'),(7,1,3,4,2,'b'), (0,1,23,4,-5,'c')]
df = sc.parallelize(data).toDF(['f1', 'f2','f3','f4', 'f5', 'class'])

使用VectorAssembler汇总向量中的所有列。

from pyspark.ml.feature import VectorAssembler

transformer = VectorAssembler(inputCols =['f1','f2','f3','f4','f5'], outputCol='features')
df2 = transformer.transform(df)

现在,使用udf

过滤数据框
from pyspark.sql.types import *
foo = udf(lambda x: not np.any(np.array(x)<0), BooleanType())
df2.drop('f1','f2','f3','f4','f5').filter(foo('features')).show()

结果

+-----+--------------------+
|class|            features|
+-----+--------------------+
|    c|[5.0,1.0,3.0,4.0,...|
|    a|[10.0,1.0,13.0,14...|
|    b|[7.0,1.0,3.0,4.0,...|
+-----+--------------------+