2016-10-10 39 views
3

试图删除其中Spark数据框列包含空白字符串的行。最初做val df2 = df1.na.drop()但事实证明,这些值中的很多被编码为""从Spark数据框中删除空白字符串

我卡在使用Spark 1.3.1,也不能依靠DSL。 (导入spark.implicit_不工作。)

+1

你想用空白字符串做什么?放下线? – eliasah

回答

8

从数据框中删除东西需要filter()

newDF = oldDF.filter("colName != ''") 

还是我误解你的问题?

+0

如何使用Where子句 –

+0

'WHERE colName IS NOT NULL'或'WHERE colName IS NOT EMPTY'来写这个东西......我想。 – Kristian

+0

或者,用DataFrames/Datasets,'oldDF.filter($“colName”=!=“”)'。别忘了'import org.apache.spark.sql.functions._ import org.apache.spark.sql.types._' –

0

我也是新的火花所以我不知道下面提到的代码是否更复杂或没有,但它的工作原理。

这里我们正在创建udf,它将空值转换为null。

sqlContext.udf().register("convertToNull",(String abc) -> (abc.trim().length() > 0 ? abc : null),DataTypes.StringType); 

上面的代码后,你可以在选择子句中使用“convertToNull”(适用于字符串),使所有字段为空这是空白的,比使用.na()。拖放()。

crimeDataFrame.selectExpr("C0","convertToNull(C1)","C2","C3").na().drop() 

注:您可以使用同样的方法在阶。 https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-udfs.html

2

如果有人不想用空白字符串删除记录,但只是将空白字符串转换为某个常量值。

val newdf = df.na.replace(df.columns,Map("" -> "0")) // to convert blank strings to zero 
newdf.show()