Разъем Greenplum-Spark предназначен для распараллеливания передачи данных между сегментами Greenplum и работниками Spark. Чтобы в полной мере использовать параллельную передачу данных, вам необходимо обеспечить достаточное количество памяти и рабочих искров, чтобы ускорить передачу данных. В противном случае вы можете использовать greenplum.jar, который использует один JDBC-коннектор для загрузки данных из HDFS в базу данных Greenplum через одного мастера Greenplum. Это значительно медленнее, когда вы используете загрузку данных в один мастер Greenplum.
Некоторые соображения: - Зависит от количества сегментов Greenplum, достаточно ли у вас рабочих / исполнителей Spark для получения или отправки данных между кластерами Spark и Greenplum?
- Зависит от памяти, выделенной рабочим / исполнителям Spark. Относится к документу « Tuning Spark »
. Из журнала ошибок с этим сообщением «java.lang.OutOfMemoryError: Превышен лимит накладных расходов GC», я могу предположить, что ваш рабочий / исполнители искры не являются имея достаточно памяти. Вам все еще нужно настроить ваших сотрудников Spark, чтобы они могли распараллеливать загрузку данных из HDFS.
Выезд os.stat()
для размера файла и file.readlines([sizehint])
. Те две функции должны быть всем, в чем Вы нуждаетесь для части чтения, и надо надеяться Вы знаете, как делать записи:)
Можно использовать wc
и split
(см. соответствующие страницы справочника) получить желаемый эффект. В bash
:
split -dl$((`wc -l 'filename'|sed 's/ .*$//'` / 3 + 1)) filename filename-chunk.
производит 3 части того же linecount (с погрешностью округления в последнем, конечно), названный filename-chunk.00
к filename-chunk.02
.
Я записал программу, и это, кажется, хорошо работает. Таким образом благодаря 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
Или, версия Python туалета и разделения:
lines = 0
for l in open(filename): lines += 1
Тогда некоторый код для чтения первых строк/3 в один файл, следующих строк/3 в другого, и т.д.
не забудьте seek () и mmap () для произвольного доступа к файлам.
def getSomeChunk(filename, start, len):
fobj = open(filename, 'r+b')
m = mmap.mmap(fobj.fileno(), 0)
return m[start:start+len]
Попробуйте
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 строк
Этот метод генератора - (медленный) способ получить фрагмент строк, не разрушая ваш объем памяти.
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)