2017-02-02 17 views
0

Я использую pyspark для анализа текста на столе в Hive. Я использую следующий кодОшибка Java Heap Space при экспорте искровых данных в базу данных hive

from pyspark.sql import SQLContext, Row, HiveContext 
from pyspark.sql.functions import col, udf, StringType 
from pyspark.sql.types import * 
from pyspark import SparkContext 
hc = HiveContext(sc) 
df=hc.sql("select * from table1") 
def cleaning_text(sentence): 
    sentence=sentence.lower() 
    sentence=re.sub('\'',' ',sentence) 
    cleaned=' '.join([w for w in cleaned.split() if not len(w)<=2 ]) 
    return cleaned 

org_val=udf(cleaning_text,StringType()) 
data=df.withColumn("cleaned",org_val(df.text)) 

data_1=data.select('uniqueid','cleaned','parsed')#2630789 #2022395 
tokenizer = Tokenizer(inputCol="cleaned", outputCol="words") 
wordsData = tokenizer.transform(data_1) 

hc.sql("SET spark.sql.hive.convertMetastoreParquet=false") 
hc.sql("create table table2 (uniqueid string, cleaned string, parsed string)") 
wordsData.insertInto('table2') 

я могу сделать

words_data.show(2) 

однако, как я пытаюсь экспортировать его, он дает мне эту ошибку

INFO FileOutputCommitter: FileOutputCommitter skip cleanup _temporary folders under output directory:false, ignore cleanup failures: false 
Exception in thread "stdout writer for python" 17/02/02 15:18:44 ERROR Utils: Uncaught exception in thread stdout writer for python 
java.lang.OutOfMemoryError: Java heap space 

Я не возражаю, если это экспортируется как текстовый файл.

ответ

0

Я запускал этот скрипт на искровой оболочке, которая по умолчанию имеет память драйвера 1g.

Я изменил его, выполнив инструкцию ниже при запуске искру Shell

pyspark --driver-memory 10g 

Это решило мою проблему

0

В то время как вы вставляете в таблицу, вы должны написать инструкцию insert в hiveContext, поскольку она записывает таблицу улья.

hc.sql("SET spark.sql.hive.convertMetastoreParquet=false") hc.sql("create table table2 (uniqueid string, cleaned string, parsed string)") wordsData.registerTempTable("tb1") val df1 = hc.sql("insert into table table2 select * from tb1")

Если выше один не работает, или если он не удовлетворяет вам попробовать ниже, где вы можете непосредственно saveAsTable (убедитесь, что таблица уже создана в нужной схеме)

wordsData.write.mode("append").saveAsTable("sample_database.sample_tablename") Если у вас есть ошибки, попробуйте указанные выше, вставьте здесь ошибки, я помогу вам

+0

'17/02/02 16:49:47 WARN MemoryManager: Общее распределение превышает 95,00% (948,830,208 байт) памяти кучи Масштабирование размеров групп строк до 24,38% для 29 авторов 17/02/02 16:50:17 Утилиты ERROR: исключение в сценарии потока stdout для python java.lang.OutOfMemoryError: Java heap space 'Это ошибка, сгенерированная –

 Смежные вопросы

  • Нет связанных вопросов^_^