【问题标题】:Why does from_json fail with "not found : value from_json"?为什么 from_json 失败并显示“未找到:值 from_json”?
【发布时间】:2017-05-19 19:25:33
【问题描述】:

我正在使用 Spark 2.1.1 (kafka 0.10+) 阅读 Kafka 主题,并且有效负载是 JSON 字符串。我想用模式解析字符串并继续业务逻辑。

似乎每个人都建议我应该使用from_json 来解析 JSON 字符串,但是,它似乎不适用于我的情况。错误是

not found : value from_json 
.select(from_json($"json", txnSchema) as "data")

当我在 spark shell 中尝试以下几行时,它工作得很好 -

val df = stream
  .select($"value" cast "string" as "json")
  .select(from_json($"json", txnSchema) as "data")
  .select("data.*")

任何想法,我在代码中做错了什么才能看到这部分在 shell 中工作,而不是在 IDE/编译时?

代码如下:

import org.apache.spark.sql._

object Kafka10Cons3 extends App {
  val spark = SparkSession
    .builder
    .appName(Util.getProperty("AppName"))
    .master(Util.getProperty("spark.master"))
    .getOrCreate

  val stream = spark
    .readStream
    .format("kafka")
    .option("kafka.bootstrap.servers", Util.getProperty("kafka10.broker"))
    .option("subscribe", src_topic)
    .load

  val txnSchema = Util.getTxnStructure
  val df = stream
    .select($"value" cast "string" as "json")
    .select(from_json($"json", txnSchema) as "data")
    .select("data.*")
}

【问题讨论】:

    标签: scala apache-spark apache-spark-sql jsonparser


    【解决方案1】:

    您可能只是缺少相关的导入 - import org.apache.spark.sql.functions._

    您已导入 spark.implicits._org.apache.spark.sql._,但这些都不会导入 functions 中的单个函数。


    我还导入了com.wizzardo.tools.json,它看起来也有一个from_json 函数,这一定是编译器选择的函数(因为它是首先导入的?)并且显然与我的 spark 版本不兼容

    确保您没有从其他 json 库导入 from_json 函数,因为该库可能与您使用的 spark 版本不兼容。

    【讨论】:

    • 不,我使用的是 Spark 2.1.1,并且此导入有效。我唯一能想到的就是你的类路径中可能有两个不同的版本,而编译器选择的那个版本太旧了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    相关资源
    最近更新 更多