Python 如何连接两个Spark结构化流?
是否可以在Spark 2.2.1中连接两个Spark结构化流?我发现在Spark结构化流媒体中进行非常简单的操作有很多问题。文档和示例的数量对我来说似乎非常有限。 我有两个流数据源: persons.json:Python 如何连接两个Spark结构化流?,python,apache-spark,pyspark,spark-structured-streaming,Python,Apache Spark,Pyspark,Spark Structured Streaming,是否可以在Spark 2.2.1中连接两个Spark结构化流?我发现在Spark结构化流媒体中进行非常简单的操作有很多问题。文档和示例的数量对我来说似乎非常有限。 我有两个流数据源: persons.json: [ {"building_id": 70, "id": 21, "latitude": 41.20, "longitude": 2.2, "timestamp": 1532609003}, {"building_id": 70, "id": 15, "latitude": 41.
[
{"building_id": 70, "id": 21, "latitude": 41.20, "longitude": 2.2, "timestamp": 1532609003},
{"building_id": 70, "id": 15, "latitude": 41.24, "longitude": 2.3, "timestamp": 1532609005},
{"building_id": 71, "id": 11, "latitude": 41.28, "longitude": 2.1, "timestamp": 1532609005}
]
machines.json
[
{"building_id": 70, "mid": 222, "latitude": 42.1, "longitude": 2.11}
]
目标是获得一个包含人和机器的纬度和经度的合并数据帧。我需要它来实时估计它们之间的距离:
building_id id mid latitude longitude latitude_machine longitude_machine
70 21 222 41.20 2.2 42.1 2.11
# ...
如果不可能连接两个流,那么我将非常感谢您推荐一些可能的解决方法
代码:
一般来说,最新版本(2.3、2.4)支持流到流连接,但至少在侧面需要水印-请参阅。如果你在寻找具体的例子,你可以去那里。但是,在2.2中,不支持流数据集之间的连接@用户6910411:谢谢。但是Spark 2.2的解决方法是什么?除了升级什么都不做?不是真的。
spark = SparkSession \
.builder \
.appName("Test") \
.master("local[2]") \
.getOrCreate()
schema_persons = StructType([
StructField("building_id", IntegerType()),
StructField("id", IntegerType()),
StructField("latitude", DoubleType()),
StructField("longitude", DoubleType()),
StructField("timestamp", LongType())
])
schema_machines = StructType([
StructField("building_id", IntegerType()),
StructField("mid", IntegerType()),
StructField("latitude", DoubleType()),
StructField("longitude", DoubleType())
])
df_persons = spark \
.readStream \
.format("json") \
.schema(schema_persons) \
.load("data/persons")
df_machines = spark \
.readStream \
.format("json") \
.schema(schema_machines) \
.load("data/machines") \
.withColumnRenamed("latitude", "latitude_machine") \
.withColumnRenamed("longitude", "longitude_machine")
df_joined = df_persons\
.join(df_machines, ["building_id"], "left")
query_persons = df_persons \
.writeStream \
.format('console') \
.start()
query_machines = df_machines \
.writeStream \
.format('console') \
.start()
query_persons.awaitTermination()
query_machines.awaitTermination()