嘗試withColumn
與功能when
如下:
val sqlContext = new SQLContext(sc)
import sqlContext.implicits._ // for `toDF` and $""
import org.apache.spark.sql.functions._ // for `when`
val df = sc.parallelize(Seq((4, "blah", 2), (2, "", 3), (56, "foo", 3), (100, null, 5)))
.toDF("A", "B", "C")
val newDf = df.withColumn("D", when($"B".isNull or $"B" === "", 0).otherwise(1))
newDf.show()
顯示
+---+----+---+---+
| A| B| C| D|
+---+----+---+---+
| 4|blah| 2| 1|
| 2| | 3| 0|
| 56| foo| 3| 1|
|100|null| 5| 0|
+---+----+---+---+
我加入了(100, null, 5)
行用於測試isNull
情況。
我試過這個代碼Spark 1.6.0
,但作爲when
代碼中的評論,它適用於1.4.0
之後的版本。
這正是我所需要的。我用'when'和'otherwise'嘗試了幾個不同的東西,但我想我得到了錯誤的確切格式。稍微偏離主題,但是你知道Spark如何處理列嗎?比如,如果我添加了〜20列,那麼使用.withColumn並保留一個數據幀或將其映射到RDD並將它們全部添加到映射中然後轉換回數據幀以保存到parquet會更快? – mcmcmc
剛剛發現[this](http://stackoverflow.com/questions/33826495/spark-scala-2-10-tuple-limit)。我認爲UDF是我正在尋找的。 – mcmcmc
UDF也是我在下面所說的... –