Изменить строки набора данных в mapPartitions - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь обогатить фрейм данных, извлекая информацию из 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"))))})

Есть ли что-то очевидное, что я мог бы пропустить?

...