У меня есть таблица с 3 столбцами:
Table A:
+----+----+----------+
|col1|col2|row_number|
+----+----+----------+
| X| 1| 1|
| Y| 0| 2|
| Z| 2| 3|
| A| 1| 4|
| B| 0| 5|
| C| 0| 6|
| D| 2| 7|
| P| 1| 8|
| Q| 2| 9|
+----+----+----------+
Я хочу объединить строки в "col1", группируя записи на основе значений "col2". «col2» имеет шаблон 1, за которым следует любое число от 0 до 2. Я хочу сгруппировать записи, в которых «col2» начинается с 1 и заканчивается 2 (порядок фрейма данных должен быть сохранен - вы можете использовать столбец row_number для заказа)
Например, первые 3 записи могут быть сгруппированы вместе, потому что "col2" имеет "1-0-2". Следующие 4 записи могут быть сгруппированы вместе, потому что их значения "col2" имеют "1-0-0-2"
Объединение может быть выполнено с использованием "concat_ws" после того, как я сгруппирую эти записи. Но какая-нибудь помощь в том, как сгруппировать эти записи на основе шаблона "1-0s-2"?
Ожидаемый результат:
+----------+
|output_col|
+----------+
| XYZ|
| ABCD|
| PQ|
+----------+
Вы можете использовать следующий код для создания этого примера данных :
schema = StructType([StructField("col1", StringType())\
,StructField("col2", IntegerType())\
,StructField("row_number", IntegerType())])
data = [['X', 1, 1], ['Y', 0, 2], ['Z', 2, 3], ['A', 1, 4], ['B', 0, 5], ['C', 0, 6], ['D', 2, 7], ['P', 1, 8], ['Q', 2, 9]]
df = spark.createDataFrame(data,schema=schema)
df.show()