Как я разделяю огромный текстовый файл в Python

Разъем Greenplum-Spark предназначен для распараллеливания передачи данных между сегментами Greenplum и работниками Spark. Чтобы в полной мере использовать параллельную передачу данных, вам необходимо обеспечить достаточное количество памяти и рабочих искров, чтобы ускорить передачу данных. В противном случае вы можете использовать greenplum.jar, который использует один JDBC-коннектор для загрузки данных из HDFS в базу данных Greenplum через одного мастера Greenplum. Это значительно медленнее, когда вы используете загрузку данных в один мастер Greenplum.

Некоторые соображения: - Зависит от количества сегментов Greenplum, достаточно ли у вас рабочих / исполнителей Spark для получения или отправки данных между кластерами Spark и Greenplum?
- Зависит от памяти, выделенной рабочим / исполнителям Spark. Относится к документу « Tuning Spark »

. Из журнала ошибок с этим сообщением «java.lang.OutOfMemoryError: Превышен лимит накладных расходов GC», я могу предположить, что ваш рабочий / исполнители искры не являются имея достаточно памяти. Вам все еще нужно настроить ваших сотрудников Spark, чтобы они могли распараллеливать загрузку данных из HDFS.

23
задан S.Lott 15 November 2008 в 00:06
поделиться

7 ответов

Выезд os.stat() для размера файла и file.readlines([sizehint]). Те две функции должны быть всем, в чем Вы нуждаетесь для части чтения, и надо надеяться Вы знаете, как делать записи:)

15
ответ дан 29 November 2019 в 00:44
поделиться

Можно использовать wc и split (см. соответствующие страницы справочника) получить желаемый эффект. В bash:

split -dl$((`wc -l 'filename'|sed 's/ .*$//'` / 3 + 1)) filename filename-chunk.

производит 3 части того же linecount (с погрешностью округления в последнем, конечно), названный filename-chunk.00 к filename-chunk.02.

3
ответ дан 29 November 2019 в 00:44
поделиться

Я записал программу, и это, кажется, хорошо работает. Таким образом благодаря Kamil Kisiel для получения меня запустился.
(Отмечают, что FileSizeParts () функция, не показанная здесь)
Позже я могу вернуться к выполнению версии, которая делает двоичное чтение, чтобы видеть если его немного более быстрый.

def Split(inputFile,numParts,outputName):
    fileSize=os.stat(inputFile).st_size
    parts=FileSizeParts(fileSize,numParts)
    openInputFile = open(inputFile, 'r')
    outPart=1
    for part in parts:
        if openInputFile.tell()<fileSize:
            fullOutputName=outputName+os.extsep+str(outPart)
            outPart+=1
            openOutputFile=open(fullOutputName,'w')
            openOutputFile.writelines(openInputFile.readlines(part))
            openOutputFile.close()
    openInputFile.close()
    return outPart-1
2
ответ дан 29 November 2019 в 00:44
поделиться

Или, версия Python туалета и разделения:

lines = 0
for l in open(filename): lines += 1

Тогда некоторый код для чтения первых строк/3 в один файл, следующих строк/3 в другого, и т.д.

0
ответ дан 29 November 2019 в 00:44
поделиться

не забудьте seek () и mmap () для произвольного доступа к файлам.

def getSomeChunk(filename, start, len):
    fobj = open(filename, 'r+b')
    m = mmap.mmap(fobj.fileno(), 0)
    return m[start:start+len]
4
ответ дан 29 November 2019 в 00:44
поделиться

Попробуйте

storeEval|window.document.domain|host
assertLocation|http://${host}/some-page|
-121--2556887-

Это на самом деле css трюк. Это происходит следующим образом:

Если установить положение родительского div в относительное, а положение дочернего divs в абсолютное, то дочерние divs останутся внутри родительского div, даже если их положение является абсолютным.

Для получения дополнительной информации см. Абсолютное позиционирование внутри относительного позиционирования .

Спасибо

-121--4067261-

linux имеет команду split

split -l 100000 file.txt

будет разделен на файлы размером 100 000 строк

35
ответ дан 29 November 2019 в 00:44
поделиться

Этот метод генератора - (медленный) способ получить фрагмент строк, не разрушая ваш объем памяти.

import itertools

def slicefile(filename, start, end):
    lines = open(filename)
    return itertools.islice(lines, start, end)

out = open("/blah.txt", "w")
for line in slicefile("/python27/readme.txt", 10, 15):
    out.write(line)
5
ответ дан 29 November 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: