Мне хотелось бы вернуть строки из моего RDD по одному (или небольшими партиями), чтобы я мог собирать строки локально, когда они мне нужны. Мой RDD достаточно велик, что он не может вписаться в память на узле имени, поэтому запуск collect()
приведет к ошибке.собирать RDD с буфером в pyspark
Есть ли способ воссоздать операцию collect()
, но с генератором, так что строки из RDD передаются в буфер? Другим вариантом будет take()
100000 строк за раз из кэшированного RDD, но я не думаю, что take()
позволяет указать начальную позицию?
Есть ли что-то, что заставляет вас избегать «saveAsTextFile»? Потому что вы можете очистить все до файла, а затем прочитать его через буфер. –
@ paul-k В настоящее время я использую saveAsTextFile, однако у этого есть пара проблем: 1) время чтения медленное, потому что это текстовые файлы, и 2) я теряю информацию о типах данных, поэтому «1» совпадает с 1 – mgoldwasser
Это правда 2) все еще проблема, но вы все равно можете писать информацию о типе, хотя это не очень экономично с точки зрения размера файла. вы также можете вызвать SaveAsPickleFile для сериализации объектов. 1) Я не думаю, что это было бы медленнее, чем фактическая реализация 'collect', поскольку она читается из временного файла в соответствии с документами: ps: //spark.apache.org/docs/0.7.2/api/pyspark /pyspark.rdd-pysrc.html#RDD.collect –