我有以下"队列"表
id | type | started_at | finished_at
----------------------------------
1 | A | some_date | some_date
2 | A | some_date | NULL
3 | A | NULL | NULL
4 | A | NULL | NULL
5 | B | some_date | some_date
6 | B | NULL | NULL
7 | B | NULL | NULL
8 | B | NULL | NULL
9 | C | NULL | NULL
10 | C | NULL | NULL
11 | C | NULL | NULL
12 | C | NULL | NULL
13 | D | some_date | NULL
14 | D | NULL | NULL
15 | D | NULL | NULL
16 | D | NULL | NULL
我想要的是获得下一个要处理的项目。
每种类型最多应同时运行2次。
因为已经有了#34;正在运行"输入A和D类型, 期望的结果看起来像这样。
id | type | started_at | finished_at
3 | A | NULL | NULL
6 | B | NULL | NULL
7 | B | NULL | NULL
9 | C | NULL | NULL
10 | C | NULL | NULL
14 | D | NULL | NULL
到目前为止我所获得的是每种类型的下两个项目。
WITH TOSTART AS (
SELECT *, ROW_NUMBER()
over (
PARTITION BY type
order by id
) AS RowNo
FROM table_name
where started_at is null and finished_at is null
)
SELECT id FROM TOSTART WHERE RowNo <= 2 -- max parallel
我需要的是带来&#34;状态&#34;考虑到了。
答案 0 :(得分:1)
首先应删除所有已完成的条目:
def run() {
val df1 = getdf1(spark: SparkSession)
val df2 = getdf2(spark:SparkSession, df1)
}
def getdf1(spark: SparkSession): DataFrame {
val sqltxt = "select * from emp"
val df1 = spark.sql(sqltxt)
df1.persist
spark.sql("SET spark.sql.hive.convertMetastoreParquet=false")
df1.write.mode(SaveMode.Overwrite).parquet("/user/user1/emp")
df1
}
def getdf2(spark: SparkSession, df1: DataFrame): DataFrame {
// perform some operations
}