Я думаю, что вы можете искать функции окна: http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=window#pyspark.sql. Окно
https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html
Вот пример в Scala (теперь у меня нет Spark Shell с Hive, поэтому я не смог проверить код, но я думаю, что он должен работать):
case class MyRow(name: String, id_sa: String, id_sb: String)
val myDF = sc.parallelize(Array(
MyRow("n1", "a1", "b1"),
MyRow("n2", "a1", "b2"),
MyRow("n3", "a1", "b2"),
MyRow("n1", "a2", "b2")
)).toDF("name", "id_sa", "id_sb")
import org.apache.spark.sql.expressions.Window
val windowSpec = Window.partitionBy(myDF("id_sa")).orderBy(myDF("id_sb").desc)
myDF.withColumn("max_id_b", first(myDF("id_sb")).over(windowSpec).as("max_id_sb")).filter("id_sb = max_id_sb")
Вероятно, есть более эффективные способы достижения тех же результатов с помощью функций Window, но я надеюсь, что это указывает на правильное направление.
Поскольку у вас есть сырой поток, я думаю, что вам нужен декодер с парсером.
Проверьте этот decode_video.c
пример на ffmpeg:
https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decode_video.c
Измените необходимые детали соответственно, как avcodec_find_decoder(...)
.
Надеюсь, что помогает.