여기에 왜 그런 일이 일어나고 있는지 확실하지 않습니다.Spark Java Heap 오류
나는 팬더와 스파크 데이터 프레임으로로드되는 데이터 프레임을 가지고 있습니다.
데이터 프레임은 거의 0을 의미합니다. 크기는 56K X 9K입니다.
그래서 크지 나는 또한 당신이 이미 집행을위한 드라이버 및 2G를위한 8 기가 바이트 할당 한 볼 경우
spark.driver.memory 8g
spark.executor.memory 2g
spark.driver.maxResultSize 2g
spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value
spark.jars.packages com.databricks:spark-csv_2.11:1.4.0
그래서 내 스파크/conf의/불꽃은 defaults.conf 파일에 다음 명령을했습니다. 내 Macbook Pro에 로컬로 설치된 Spark를 사용하고 있습니다.
나는
recommender_ct.show()
이 내가 무엇을 얻을 처음 5 선을보고 할 때 :
---------------------------------------------------------------------------
Py4JJavaError Traceback (most recent call last)
<ipython-input-7-8c71bfcdfd03> in <module>()
----> 1 recommender_ct.show()
/Users/i854319/spark/python/pyspark/sql/dataframe.pyc in show(self, n, truncate)
255 +---+-----+
256 """
--> 257 print(self._jdf.showString(n, truncate))
258
259 def __repr__(self):
/Users/i854319/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py in __call__(self, *args)
811 answer = self.gateway_client.send_command(command)
812 return_value = get_return_value(
--> 813 answer, self.gateway_client, self.target_id, self.name)
814
815 for temp_arg in temp_args:
/Users/i854319/spark/python/pyspark/sql/utils.pyc in deco(*a, **kw)
43 def deco(*a, **kw):
44 try:
---> 45 return f(*a, **kw)
46 except py4j.protocol.Py4JJavaError as e:
47 s = e.java_exception.toString()
/Users/i854319/spark/python/lib/py4j-0.9-src.zip/py4j/protocol.py in get_return_value(answer, gateway_client, target_id, name)
306 raise Py4JJavaError(
307 "An error occurred while calling {0}{1}{2}.\n".
--> 308 format(target_id, ".", name), value)
309 else:
310 raise Py4JError(
Py4JJavaError: An error occurred while calling o40.showString.
: java.lang.OutOfMemoryError: Java heap space
이 데이터 프레임은 아래와 같이 스파크 데이터 프레임의 크로스 탭을 사용하여 만든 :
recommender_ct=recommender_sdf.crosstab('TRANS','ITEM')
.show()를 사용하면 recommender_sdf 위의 스파크 데이터 프레임이 잘 작동합니다.
팬더 데이터 프레임에는 동일한 크로스 탭 방식이 사용되며 아래의 경우 매우 잘 작동합니다.
이것은 즉시 작동합니다.
파일이 메모리에 쉽게로드되고 팬더에서 사용할 수 있지만 .show() 또는 .head()를 사용하면 스파크에서 동일한 데이터 프레임이 Java 힙 오류를 던지고 있음을 보여줍니다. 그리고 그것은 오류를 던지기 전에 많은 시간을 할애하고 있습니다.
왜 이런 일이 발생하는지 이해가되지 않습니다. Spark는 pandas보다 빠르지 않으며, 동일한 데이터 프레임에 pandas를 사용하여 쉽게 액세스하고 인쇄 할 수있을 때이 메모리 문제가 없어야합니다.
편집 :
확인. I 열 이름은 기본적으로 긴 텍스트 문자열 대응 팬더 데이터 프레임
TRANS Bob Iger: How Do Companies Foster Innovation and Sustain Relevance “I Will What I Want” - Misty Copeland "On the Lot" with Disney Producers "Your Brain is Good at Inclusion...Except When it's Not" with Dr. Steve Robbins (please do not use) WDW_ER-Leaders of Minors 1. EAS Project Lifecycle Process Flow 10 Life Lessons from Star Wars 10 Simple Steps to Exceptional Daily Productivity 10 Steps to Effective Listening
0 353 0 0 0 0 0 0 0 0 0
1 354 0 0 0 0 0 0 0 0 0
2 355 0 0 0 0 0 0 0 0 0
3 356 0 0 0 0 0 0 0 0 0
4 357 0 0 0 0 0 0 0 0 0
에서 처음 몇 행과 열을 인출 할 때 크로스 탭 스파크 데이터 프레임은 다음과 같다. 그리고 열 값은 0 또는 1입니다.
당신의 행동은 무엇입니까? 몇 가지 코드 예가있을 수 있습니까? 특정 조치 조작으로 인해 데이터가 축적되어 OOM 오류가 발생할 수 있습니다. – kosa
위의 오류는 위의 스파크 데이터 프레임에서 .show()를 수행 할 때 발생합니다. 기본적으로 .show()는 실행 프로그램에서 드라이버로 데이터를 가져올 것이지만 동일한 데이터 프레임을 팬더가 메모리에로드 할 수 있고 그 결과를 표시 할 수 있다면 왜 스파크로 인해 문제가되는지 확실하지 않습니다 – Baktaawar
" 오류를 던지기 전에 많은 시간을 들여야합니다."-> 적용 할 변환은 무엇입니까? 변환은 작업이 아닌 여기에 범인입니다. 변환을 위해 전달하는 재귀 함수가 있습니까? – kosa