我正在使用pyspark(spark 2.3.0)的“结构化流”,并且很难弄清楚如何使用自定义处理程序功能来处理流数据。
我阅读了有关foreachBatch
和 df = spark \
.readStream \
.format("kafka") \
.option("maxFilesPerTrigger", 1) \
.option("kafka.bootstrap.servers", options["kafka.bootstrap.servers"]) \
.option("startingOffsets", options["startingOffsets"]) \
.option("subscribe", options["subscribe"]) \
.option("failOnDataLoss", options["failOnDataLoss"]) \
.load() \
.select(
col('value').cast("string").alias('json'),
col('key').cast("string").alias('kafka_key'),
col("timestamp").cast("string").alias('kafka_timestamp')
) \
.withColumn('pjson', from_json(col('json'), jsonSchema)).drop('json')
query = df \
.writeStream \
.foreach(customHandler) \ #this doesn't works on spark 2.3.0
.start()
query.awaitTermination()
的文档。但仅从spark 2.4.x版本可用。有其他选择吗?
到目前为止我所拥有的:
import java.util.ArrayList;
import java.util.List;
public class A<T> {
protected List<T> objects;
public A() {
objects = new ArrayList<T>();
}
public A(List<T> objects) {
this.objects = objects;
}
public List<T> getObjects() {
return objects;
}
public void addObject(T o) {
getObjects().add(o);
}
}