![](/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.