为什么from_json失败了“not found:value from_json”?

时间:2017-05-19 19:25:33

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

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

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

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

当我在火花壳中尝试以下几行时,效果很好 -

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.*")
}

1 个答案:

答案 0 :(得分:9)

您可能只是错过了相关的导入 - import org.apache.spark.sql.functions._

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

  

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

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