У меня есть вопрос относительно структурированной потоковой передачи Spark в потоке Kafka.
У меня есть схема типа:
StructType schema = new StructType()
.add("field1", StringType)
.add("field2", StringType)
.add("field3", StringType)
.add("field4", StringType)
.add("field5", StringType);
Я загружаю свой поток из темы Kafka как:
Dataset<Row> ds1 = spark
.readStream()
.format("kafka")
.option("kafka.bootstrap.servers", "brokerlist")
.option("zookeeper.connect", "zk_url")
.option("subscribe", "topic")
.option("startingOffsets", "earliest")
.option("max.poll.records", 10)
.option("failOnDataLoss", false)
.load();
следующее преобразование в строку, тип строки:
Dataset<Row> df1 = ds1.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)");
Теперь я хотел бы преобразовать поле значения (которое является JSON) в ранее преобразованную схему, которая должна сделатьSQL-запросы проще:
Dataset<Row> df2 = df1.select(from_json("value", schema=schema).as("data").select("single_column_field");
Кажется, что Spark 2.3.1 не знает функцию from_json
?
Это мой импорт:
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.streaming.OutputMode;
import org.apache.spark.sql.streaming.StreamingQueryException;
import org.apache.spark.sql.types.StructType;
Есть идеи, как решить эту проблему?Обратите внимание, что я ищу не решение Scala, а решение, основанное исключительно на Java!