Ошибка кучи Java при экспорте искрового фрейма в базу данных куста
Я использую pyspark для анализа текста на столе в 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
Я не против, если это экспортируется как текстовый файл тоже.
2 ответа
Я запустил этот скрипт на оболочке spark, которая по умолчанию имеет размер памяти 1g.
Я изменил его, выполнив приведенное ниже утверждение при запуске оболочки свечи
pyspark --driver-memory 10g
Это решило мою проблему
В то время как вы вставляете в таблицу, вы должны записать оператор вставки в 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")
Если вышеприведенное не работает или не удовлетворяет вас, попробуйте следующее, где вы можете напрямую сохранить AsTable (убедитесь, что таблица уже создана в желаемой схеме)
wordsData.write.mode("append").saveAsTable("sample_database.sample_tablename")
Если вы обнаружите какие-либо ошибки, попробуйте перечислить ошибки здесь, я помогу вам в дальнейшем.