Я использую искру с scala.Программно добавляя несколько столбцов в Spark DataFrame
У меня есть Dataframe с 3 столбцами: ID, время, RawHexdata. У меня есть пользовательская функция, которая принимает RawHexData и расширяет ее на X больше столбцов. Важно указать, что для каждой строки X одинаково (столбцы не меняются). Однако, прежде чем я получу первые данные, я не знаю, что такое столбцы. Но как только у меня есть голова, я могу это вывести.
Мне нужен второй Dataframe с указанными столбцами: Id, Time, RawHexData, NewCol1, ..., NewCol3.
«самый легкий» метод, который я могу думать, чтобы сделать это: 1. Deserialize каждая строка в формате JSON (каждый tyoe данные сериализуем здесь) 2. добавить свои новые столбцы, 3. десериализации новый dataframe от измененный json,
Однако это кажется пустой тратой, поскольку это включает в себя 2 дорогостоящих и избыточных этапа сериализации json. Я ищу более чистый рисунок.
Использование классов case, кажется плохой идеей, потому что я не знаю количество столбцов или имена столбцов заранее.
Не могли бы вы предоставить более подробную информацию? Пример данных, содержащихся в «RawHexdata». – zero323
вы всегда можете применить функцию '.withColumn()' только после того, как выполнены некоторые условия. – Niemand
Rawhexdata - это гигантский двоичный блок, отправленный связью встроенных устройств. I содержит данные, которые будут десериализованы в другие плоские числовые данные: удваивает, ints, комплексные числа и т. Д. Позже я хотел бы позволить аналитику запросить эти данные с помощью Sparksql. Однако, когда данные находятся в блоке, это невозможно, поэтому я написал UDF «parseblob», который берет blob и возвращает объект map/json (я могу изменить тип возврата в соответствии с душой). Я хотел бы, чтобы содержимое этой карты было столбцами в другой таблице, где каждая строка связана с исходными необработанными данными. – eshalev