我是Scala的新手,只花了3个小时试图找出如何将一个简单的json字符串解析为数据帧内的字符串数组。
这是我的代码:
import spark.implicits._
import org.apache.spark.sql.functions._
...
emailsDf.select(from_json($"emails", Array[String])).show()
emailsDf
数据框有一列名为“电子邮件”,每行都是一个字符串数组的json字符串:["test1@mail.com", test2@mail.com, ...]
以下是我收到的错误消息:
描述资源路径位置类型 方法中缺少的参数列表适用于对象数组未应用的方法仅在需要函数类型时转换为函数。您可以通过编写apply _或apply()()代替申请来明确转换。
答案 0 :(得分:0)
您可以使用UDF将字符串转换为数组。一个包含一些测试数据的小例子:
val df = Seq("[email1, email2, email3]", "[email4, email5]").toDF("emails")
val split_string_array = udf((emails: String) => {
emails.substring(1, emails.length - 1).split(",").map(_.trim)
})
val df2 = df.withColumn("emails", split_string_array($"emails"))
df2
现在将包含一个带有数组
root
|-- emails: array (nullable = true)
| |-- element: string (containsNull = true)
希望。