2017-09-22 3 views
4

사용의 위험은 (현재 초기 릴리스는, 텍스트가 변경 될 수 있습니다), 저자는 불꽃에 사용자 정의 함수에 대한 Pyspark의 사용에 대해 조언 :스파크 : "스파크 : 확실한 가이드"책에서 파이썬

" 이 파이썬 프로세스를 시작하는 것은 비용이 많이 들지만 실제 비용은 데이터를 파이썬으로 직렬화하는 것입니다. 이것은 두 가지 이유로 값이 비쌉니다. 값 비싼 계산이지만 데이터가 파이썬에 들어가면 Spark가 작업자의 메모리를 관리 할 수 ​​없습니다. JVM과 파이썬이 동일한 머신의 메모리를 차지하기 때문에 리소스가 제한되면 작업자가 실패 할 가능성이 있습니다. "

저는 파이썬과 JVM 사이의 작업자 노드 리소스에 대한 경쟁이 심각한 문제가 될 수 있다는 것을 알고 있습니다. 그러나 그것은 운전자에게도 적용되지 않습니까? 이 경우 Pyspark를 사용하는 것에 대한 논쟁이 될 수 있습니다. 운전자에게 어떤 상황이 다른지 설명해 줄 수 있습니까? 드라이버 응용 프로그램에서

답변

1

는 오히려이 더 일반적으로 PySpark보다 및 낮은 정도에 파이썬 UDF를 사용하여에 대한 인수가 비슷한 인수가 (JVM에서 구현) 기본 UDF에 대해 할 수있다.

또한 그래서, vectorized UDFs는 스파크 도로지도를 참고한다 :

실제 비용은 더 이상 미래의 문제 일 수 있습니다 파이썬

에 데이터를 직렬화에 있습니다.

그러나 그 또한 드라이버에 적용되지 않습니다?

너무 많이하지 않습니다. 단일 노드의 자원을 공유하는 것은 항상 문제가되지만 (추가 서비스의 위치를 ​​고려할 때) UDF의 문제는 매우 구체적입니다. 동일한 데이터를 동시에 두 개의 서로 다른 컨텍스트에 저장해야합니다.

예를 들어 RDD API를 사용하도록 선택하면 JVM은 대부분 통신 레이어 역할을하며 오버 헤드가 훨씬 적습니다. 따라서 네이티브 Python 계산을 위해서는 훨씬 더 자연스러운 선택입니다. 더 적합한 네이티브 Python 도구를 찾을 수도 있습니다.

+0

예, 저자는 독점적으로 UDF를 참조하고, 나는 그 질문에이를 표시하려고했습니다. RDD API에 대한 귀하의 의견은 다음과 같습니다. 우리는 동일한 데이터를 사용할 때 두 가지 다른 상황에 여전히 데이터를 저장합니다. 그렇지 않습니까? – MightyCurious

0

, 당신은 반드시 collect 기록의 톤 할 필요가 없습니다. 어쩌면 통계를 줄이는 것일 수도 있습니다.

이것은 일반적인 동작입니다. 드라이버는 일반적으로 통계 결과를 처리합니다. 귀하의 마일리지가 다를 수 있습니다.

반면 스파크 응용 프로그램은 일반적으로 실행 프로그램을 사용하여 메모리에서 허용하는만큼 많은 데이터를 읽고 처리합니다. 따라서 메모리 관리는 거의 항상 관심사입니다.

나는 이것이 책에서 얻는 구별이라고 생각한다.

+0

내가 처음에 그 구절을 책에서 읽었을 때, 나는 비슷한 생각을 가지고있었습니다. 그러나 드라이버로서 더 작은 기계를 사용하기로 결정하는 것은 바로이 주장입니다. 얼마나 많은 메모리가 사용되는지 (물론 중요합니다) 문제는 아니지만, 메모리 사용을 제어하고 클러스터의 모든 컴퓨터가 리소스가 제한되는 것을 방지 할 수 있는지 여부는 저에게 묻습니다 아닙니다. – MightyCurious