У меня есть кортеж, созданный Спарком после присоединения. Он имеет ключ, два столбца в кортеже, а затем остальные столбцы из второй таблицы. Я не обязательно знаю, сколько столбцов находится во второй таблице.Сгладить кортеж неизвестной длины
Так, например:
(2324234534, (('23213','2013/03/02'), 12.32, 32.4, 45))
я смог отделить кортеж, если есть один столбец после молнии, дата кортежа, как это в PySpark:
x.map(lambda p: (p[0], (p[1][0][0], p[1][0][1], p[1][1])))
в Python:
map(lambda p: (p[0], (p[1][0][0], p[1][0][1], p[1][1])), x)
Это производит вывод Ищу:
(2324234534, ('23213','2013/03/02', 12.32))
Если я хочу больше, чем один столбец после молнии, дату, то у меня есть этот код:
x.map(lambda p: (p[0], (p[1][0][0], p[1][0][1], p[1][1:])))
Однако он производит этот выход:
(2324234534, ('23213','2013/03/02', (12.32, 32.4, 45)))
В любом случае, мой текущий метод хакки и не дает результата, который я ищу. Мне интересно, может быть, узнать, как сгладить кортежи вообще (другие темы, которые я нашел в этой теме, меняют кортежи в списки, что не на 100%, что я ищу)
в общем случае, это уплощения генератор выглядит хорошо для меня: http://stackoverflow.com/a/2158532/2337736 Он будет работать над любой итерацией , и вернет генератор, который вы можете использовать для создания кортежа - 'tuple (flatten (some_iterable))'. Для вашего конкретного вопроса - в вашем примере вы отбрасываете два значения (2,4 и 45). Желательно? –
@PeterDeGlopper Я могу только достичь желаемой структуры, когда у меня есть только первое значение на выходе. В противном случае он печатается как кортеж. Кроме того, я попробовал код, который вы предложили, и он не работает для ввода. – Michal
Вам нужно будет сделать что-то вроде 'x.map (lambda p: (p [0], кортеж (flatten (p [1]))))', чтобы сохранить единый уровень вложенности, который вы хотите, - который работает на вашем test 'p = (2324234534, (('23213', '2013/03/02'), 12.32, 32.4, 45))'. Или, по крайней мере, он сглаживает это до '(2324234534, ('23213', '2013/03/02', 12.32, 32.399999999999999, 45))', я не совсем уверен, что вы ищете. –