2016-10-10 42 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()