- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-27-2022 12:08 AM
I am facing the same issue when I am trying to run forEachbatch with Azure event Hub. Can anyone help?
In my case, I keep receiving real time orders in azure event hub, but i always need to pick the latest order and remove all the history of the same trades that are already available inside event hub.
For ex: I can receive dataset as below (ignore 'a' in the end of field tx)
So, in this example- I need to pick latest order which has maximum tx and for that maximum tx, minimum process_timestamp as sometimes the same tx comes twice with two different process timestamp. So, inside event hub you can have similar dataset with multiple rows for a particular order in the same batch.
I am using the below code in the foreach batch, but its not processing all the rows from event hub.
def upsertToMT4TradeDelta(microBatchOutputDF, batchId):
microBatchOutputDF = microBatchOutputDF.orderBy(col("tx").desc(), col("process_timestamp").asc()).dropDuplicates(["instance", "order_id"])
microBatchOutputDF.createOrReplaceTempView("updates")
microBatchOutputDF._jdf.sparkSession().sql("""
MERGE INTO rdh.live_mt4_trade t
USING updates u
ON t.instance = u.instance and t.order_id = u.order_id
WHEN MATCHED AND u.tx > t.tx THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *
""")