Я пытаюсь обогатить фрейм данных, извлекая информацию из API отдыха, но не перегружая ее, то есть то, что я ищу, - это, по сути, способ запуска withColumn с UDF, который не будет выполняться для каждой отдельной строкино для группы строк (например, для каждого раздела).
Я предполагал, что это будет тривиально с mapPartitions, но, поскольку я имею дело с набором данных, который является неизменным, это, кажется, недело. Единственный подход, который мне показался похожим, может сработать - это создать новый объект Row для каждой строки в разделе (с RowFactory.createRow
), но это также подразумевает, что если я хочу добавить новый столбец во весь фрейм данных,что я сначала добавляю его с некоторым нулевым значением и только потом изменяю это значение при построении новой строки, то есть:
val df = spark.read.parquet("some path")
df.withColumn("enrichment_data", lit(None).cast(StringType))
df.mapPartitions(partition => {
partition.map(row => RowFactory.createRow(...allfields...,enrich(row.getAs("enrichment_data"))))})
Есть ли что-то очевидное, что я мог бы пропустить?