我正在使用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.*")
}
答案 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版本不兼容。