#python #python-2.7 #apache-spark #pyspark
#python #python-2.7 #apache-spark #pyspark
Вопрос:
Я хочу отсортировать имеющийся у меня RDD, который содержит диапазон ключей 0-49995 таким образом, что (0, значение), … , (49995, значение).
Я хочу отсортировать его в порядке возрастания, и я использую функцию sortByKey (), но, похоже, она работает неправильно, потому что это результат, который я получаю:
test0.sortByKey(True).take(5)
[(u ‘0’, [u’38737′, u’18591′, u’27383′, u ‘34211’, u’337′, u’352′, u ‘1532’, u ‘12143’, u’12561′, u’17880′]), (u’1′, [u ‘35621’, u ‘44891’, u ‘14150’ , u ‘15356’, u ‘35630’, u ‘13801’, u ‘13889’, u ‘14078’, u ‘25228’, u’13805′]), (u ’10’, [u’83’, u’18’, u’38’, u’89’, u’3′, u’11’, u’29’, u’41’, u’53’, u’55’]), (u’100′, [u ‘42704’ , u ‘122’, u’125′, u’128′, u ‘131’, u ‘2501’, u ‘11200’, u ‘12049’, u ‘12576’, u ‘18583’]), (u ‘1000’, [u ‘8671’, u ‘955’, u ‘1012’, u ‘1020’, u ‘1378’, u ‘2413’, u ‘7699’, u ‘10276’, u ‘12625’, u ‘12667’ ])]
Это началось с ключа 0, 1, но затем перешло к 10 и перескочило к 100, затем к 1000. Оно должно возрастать с 0-5. Может кто-нибудь, пожалуйста, сказать мне, что я здесь делаю не так?
Спасибо!
Ответ №1:
Вы сортируете строки — как показано u
префиксом на выходе (для Unicode, не то чтобы это действительно имело значение). Поэтому он работает так, как 10
было раньше 2
, когда тестировался в виде строки.
Сопоставьте все ваши значения с целыми числами перед началом работы с ними, и все должно быть в порядке.
Комментарии:
1. Спасибо за вашу помощь, Филип! В этом есть большой смысл. Я не знаком с тем, как перейти с того места, где я нахожусь, к преобразованию строковых ключей в целочисленные ключи. Не могли бы вы помочь мне с примером?
2. Не бери в голову, Филип. Я выяснил, как, и это решило мою проблему. Я сделал, test0.map(лямбда x: (int(x[0], x[1])).возьмите(5). Большое вам спасибо за вашу помощь!
3. Я не могу отредактировать предыдущий комментарий, но в функции map есть опечатка. Этот комментарий для тех, кто сталкивается с подобной проблемой: test0.map(lambda x: (int(x[0]), x[1])) является правильным вызовом map. Мне не хватало закрывающих круглых скобок после приведения int к x [0].