![](/img/trans.png)
[英]In spark Data frame how to convert Date column of type string to Date column of type Date using scala
[英]How do I convert a Column DataType to String in Spark Scala?
我正在嘗試調用 from_json 方法並希望動態獲取 JSON 的模式。 問題在於 third.withColumn 行,因為它似乎不喜歡 Seq[Column]。
val randomStringGen = udf((length: Int) => {
scala.util.Random.alphanumeric.take(length).mkString
})
val randomKeyGen = udf((key: String, value: String) => {
s"""{"${key}": "${value}"}"""
})
val resultDF = initDF
.withColumn("value", randomStringGen(lit(10)))
.withColumn("keyValue", randomKeyGen(lit("key"), col("value")))
.withColumn("key", from_json(col("keyValue"), spark.read.json(Seq(col("keyValue")).toDS).schema))
錯誤:值 toDS 不是 Seq[org.apache.spark.sql.Column].withColumn("key", from_json(col("keyValue"), spark.read.json(Seq(col("keyValue" )).toDS).模式))
我有一個已知的解決方案,它只是對示例 JSON 進行硬編碼:
val jsData = """{"key": "value"}"""
並將 col("keyValue") 替換為硬編碼變量。
.withColumn("key", from_json(col("keyValue"), spark.read.json(Seq(jsData).toDS).schema))
這有效並產生了我想要的結果,但如果我有一個大的 json,那么這種方法可能會非常麻煩。
你寫的有兩個小錯誤。
首先,如果你想在Seq
上使用toDS
方法,你需要import spark.implicits._
。 這個方法在那里定義。 這樣做應該可以消除您的第一個錯誤。
其次,您嘗試使用的from_json
function 具有以下 function 簽名:
def from_json(e: Column, schema: StructType): Column
所以第二個字段schema
應該是一個 StructType。 這是 Dataset 的.schema
方法返回的內容。 所以,你的括號之一是錯誤的 position。
代替
.withColumn("key", from_json(col("keyValue"), spark.read.json(Seq(col("keyValue")).toDS.schema)))
你應該有
.withColumn("key", from_json(col("keyValue"), spark.read.json(Seq(col("keyValue")).toDS).schema))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.