у меня есть Спарк RDD, который типа двух классов случае - что-то вроде этого:Как конвертировать РД в течение нескольких классов случае в РДУ их компоненты
RDD[(ACTKey, UIDSKey)]
где тематические классы определяет следующим образом:
case class ACTKey(ACCOUNT: Int, PERIOD: String, COUNTRY: String)
case class UIDSKey(PRODUCT: String, UNIT: String, ID: Int)
Когда я спасаю его в таблице улей, вызвав dataframe.saveAsTable («MyTable», SaveMode.Overwrite) создает двухмерную структуру таблицы:
_1 (struct<ACCOUNT:int,PERIOD:string,COUNTRY:string>)
_2 (struct<PRODUCT:string,UNIT:string, ID:int>)
Я хочу иметь простую структуру таблицы вроде этого: СЧЕТ: INT, период: строка, страна: строка, PRODUCT: строка, единица измерения: строка, ID: ИНТ
Один из способов сделать это вручную сопоставьте мой RDD с отдельными компонентами класса case, например map (x => (x._1.ACCOUNT, x._1.PERIOD, ... и т. д.)), но есть слишком много жесткого кодирования, которое должно измениться, если мои классы классов меняются. Поэтому я ищу более элегантное решение, например, чтобы сгладить структуру моего RDD, которая может быть использована для любого RDD, основанного на наборе классов case.
А что если добавить еще один способ, как 'extract' внутри' случае class' что-то вроде 'Защиту извлечь = (this.ACCOUNT, this.PERIOD, this.COUNTRY)' –
Это очень похоже на сопоставление, которое я описал выше, и что-то, чего я пытаюсь избежать - жесткое кодирование атрибутов класса, так как в действительности у меня есть большое количество атрибутов. Также они могут меняться в процессе разработки, а их наличие в нескольких местах может привести к отсутствию некоторых из них. –