簡體   English   中英

將StringType列添加到現有Spark DataFrame,然后應用默認值

[英]Adding StringType column to existing Spark DataFrame and then applying default values

Scala 2.10在這里使用Spark 1.6.2。 我有一個類似 (但不相同)的問題作為這一個 ,然而,接受的答案是不是SSCCE並承擔一定的“前期知識”關於星火; 因此我無法重現或理解它。 更重要的是 ,該問題也僅限於向現有數據框添加新列,而我需要為數據框中的所有現有行添加列值。


所以我想在現有的Spark DataFrame中添加一個列,然后將該新列的初始('default')值應用於所有行。

val json : String = """{ "x": true, "y": "not true" }"""
val rdd = sparkContext.parallelize(Seq(json))
val jsonDF = sqlContext.read.json(rdd)

jsonDF.show()

當我運行時,我得到以下作為輸出(通過.show() ):

+----+--------+
|   x|       y|
+----+--------+
|true|not true|
+----+--------+

現在我想在jsonDF創建之后添加一個新字段,而不修改json字符串,這樣得到的DF看起來像這樣:

+----+--------+----+
|   x|       y|   z|
+----+--------+----+
|true|not true| red|
+----+--------+----+

意思是,我想在DF類型中添加一個新的“ z ”列,類型為StringType ,然后默認所有行包含z"red"

從另一個問題我將以下偽代碼拼湊在一起:

val json : String = """{ "x": true, "y": "not true" }"""
val rdd = sparkContext.parallelize(Seq(json))
val jsonDF = sqlContext.read.json(rdd)

//jsonDF.show()

val newDF = jsonDF.withColumn("z", jsonDF("col") + 1)

newDF.show()

但是當我運行它時,我在.withColumn(...)方法上.withColumn(...)編譯器錯誤:

org.apache.spark.sql.AnalysisException: Cannot resolve column name "col" among (x, y);
    at org.apache.spark.sql.DataFrame$$anonfun$resolve$1.apply(DataFrame.scala:152)
    at org.apache.spark.sql.DataFrame$$anonfun$resolve$1.apply(DataFrame.scala:152)
    at scala.Option.getOrElse(Option.scala:120)
    at org.apache.spark.sql.DataFrame.resolve(DataFrame.scala:151)
    at org.apache.spark.sql.DataFrame.col(DataFrame.scala:664)
    at org.apache.spark.sql.DataFrame.apply(DataFrame.scala:652)

我也沒有看到任何允許我將"red"設置為默認值的API方法。 關於我哪里出錯的想法?

你可以使用lit功能。 首先你必須導入它

import org.apache.spark.sql.functions.lit

並使用它如下所示

jsonDF.withColumn("z", lit("red"))

將自動推斷列的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM