Разреден вектор RDD в pyspark

Внедрявам описания тук метод TF-IDF с Python/Pyspark, използвайки функция от mllib:

https://spark.apache.org/docs/1.3.0/mllib-feature-extraction.html

Имам комплект за обучение от 150 текстови документа, набор за тестване от 80 текстови документа. Създадох хеш таблица TF-IDF RDD (от редки вектори) както за обучение, така и за тестване, т.е. представяне на пакет от думи, наречено tfidf_train и tfidf_test. IDF се споделя между двамата и се основава единствено на данните за обучението. Въпросът ми се отнася до това как да се справя с редки RDD, има много малко информация.

Сега бих искал ефективно да картографирам всеки един от 80-те TF-IDF вектора на тестови документи към тренировъчния TF-IDF вектор, който споделя най-високото косинусово сходство. Чрез въвеждането на tfidf_test.first(), виждам, че всеки разреден TF-IDF вектор (съставляващ и двата RDD) изглежда по следния начин:

SparseVector(1048576, {0: 15.2313, 9377: 8.6483, 16538: 4.3241, 45005: 4.3241, 67046: 5.0173, 80280: 4.3241, 83104: 2.9378, 83107: 3 .0714, 87638: 3.9187, 90331: 3.9187, 110522: 1.7592, 138394 : 3.631, 140318: 4.3241, 147576: 4.3241, 165673: 4.3241, 172912: 3.9187, 179664: 4.3241, 179767: 5.0173, 189356: 1.047, 190 616: 4.3241, 192712: 4.3241, 193790: 3.4078, 220545: 3.9187, 221050: 3.4078 , 229110: 3.4078, 232286: 2.0728, 240477: 3.631, 241582: 4.3241, 242620: 3.9187, 245388: 5.0173, 252569: 2.8201, 255985: 5. 0173, 266130: 4.3241, 277170: 3.9187, 277863: 4.3241, 298406: 4.3241, 323505 : 4.3241, 326993: 3.2255, 330297: 4.3241, 334392: 3.4078, 354917: 3.631, 355604: 3.9187, 365855: 4.3241, 383386: 2.9378, 38 6534: 4.3241, 387896: 3.2255, 392015: 4.3241, 395372: 1.4619, 406995: 3.4078 , 414351: 5.0173, 433323: 4.3241, 434512: 4.3241, 438171: 4.3241, 439468: 4.3241, 453414: 3.9187, 454316: 4.3241, 456931: 3 .9187, 461229: 3.631, 488050: 5.0173, 506649: 4.3241, 508845: 3.0714, 512698 : 4.3241, 526484: 8.6483, 548929: 2.8201, 549530: 4.3241, 550044: 3.631, 555900: 4.3241, 557206: 6.451, 570917: 1.8392, 618 498: 3.4078, 623040: 3.5968, 637333: 4.3241, 645028: 2.9378, 669449: 3.0714 , 676506: 4.3241, 699388: 4.3241, 702049: 2.3782, 715677: 3.4078, 733071: 3.9187, 738831: 3.631, 743497: 8.6483, 782907: 1. 047, 793071: 4.3241, 801052: 4.3241, 805189: 3.2255, 811506: 4.3241, 812013 : 4.3241, 819994: 4.3241, 837270: 4.3241, 848755: 3.9187, 852042: 4.3241, 866553: 4.3241, 872996: 3.2255, 908183: 5.0173, 9 14226: 8.6483, 921216: 4.3241, 925934: 4.3241, 927892: 4.3241, 935542: 5.0173 , 941563: 1.0855, 958430: 3.4078, 959994: 1.7984, 977239: 3.9187, 978895: 3.0714, 1001818: 3.2255, 1002343: 3.2255, 1016145 : 4.3241, 1017725: 4.3241, 1031685: 8.1441})

Не съм сигурен как да сравня RDD, но мисля, че reduceByKey(lambda x,y: x*y) може да е полезен. Някой има ли идеи как да сканира всеки тестов вектор и да изведе в кортеж от (вектор, съвпадащ с от тренировъчен набор, стойност на косинусово сходство)?

Всяка помощ се оценява!


person Matt    schedule 11.08.2015    source източник
comment
Имам ужасното усещане, че HashingTF() не позволява никакъв начин за обратно проследяване на вашия ключ, така че това прави пакета mllib.feature безполезен за съпоставяне по косинус... stackoverflow.com/questions/31151163/ Пропускам ли нещо?   -  person Matt    schedule 11.08.2015