2016-07-07 2 views
0

동일한 요약 및 일치하는 dtypes의 동일한 열을 가진 요약 통계의 두 개의 작은 데이터 프레임을 스택하려고합니다. 첫 번째 데이터 프레임은 내 메인 데이터 프레임 (서브 세트)에 describe을 호출 한 결과입니다. 두 번째는 두 가지 유형의 요약 통계로 내가 조립하고 첫 번째 통계에 추가하려고합니다. 내가 df1.unionAll(df2)을하려고 할 때 다음과 같은 오류 얻을 : 그러나unionAll의 pySpark에서 "작업을 직렬화 할 수 없습니다"오류가 발생했습니다.

Py4JJavaError: An error occurred while calling o330.collectToPython. : org.apache.spark.SparkException: Task not serializable

을, 그것이 내가 목록으로 그들을 수집하는 경우 잘 작동, 그들을 연결 한 후 다시 병렬화 :

df1_c = df1.collect() 
df1_c 

[Row(summary=u'count', C0=u'3526154', C3=u'3526154', C4=u'1580402', C5=u'3526154', C6=u'3526154'), Row(summary=u'mean', C0=u'5.50388599500189E11', C3=u'4.178168090221902', C4=u'234846.78065481802', C5=u'5.134865351881966', C6=u'354.7084951479714'), Row(summary=u'stddev', C0=u'2.5961123619752225E11', C3=u'0.34382335723646484', C4=u'118170.68592261615', C5=u'3.3833930336063456', C6=u'4.011812510792076'), Row(summary=u'min', C0=u'100002091588', C3=u'2.75', C4=u'0.85', C5=u'-1', C6=u'292'), Row(summary=u'max', C0=u'999995696635', C3=u'6.125', C4=u'1193544.39', C5=u'34', C6=u'480')]

df2_c = df1.collect() 
df2_c 

[Row(summary=u'skew', C0=u'-0.00183847089857', C3=u'0.519799339496', C4=u'0.758411576756', C5=u'0.286480156084', C6=u'-2.69765201567'), Row(summary=u'kurtosis', C0=u'-1.19900726351', C3=u'0.126057726847', C4=u'0.576085602656', C5=u'0.195187780089', C6=u'24.7237858944')]

dd1 = df1.collect() 
dd2 = df2.collect() 
dd3 = dd1 + dd2 
new_df = sc.parallelize(dd3).toDF() 
new_df.show() 

(A new dataframe with the previous two stacked just the way they should be, but looks messy here because it's too big so I'm leaving it off)

또한 각 수집 된 목록에서 병렬 처리하고 toDF을 호출 한 다음 이라는 새 데이터 프레임에서 unionAll을 호출하면 정상적으로 작동합니다.이 작업은 요약 통계 일 뿐이므로 작은 데이터 프레임에서만 발생해야합니다. 그러나 먼저 목록으로 수집해야하는 것은 분명히 옳은 것처럼 보입니다. 그리고 저는 과거에 아무런 문제없이 데이터 프레임에서 unionAll을 성공적으로 사용했습니다. describe에서 생성 된 데이터 프레임과 무효화 된 개체에서 생성 된 데이터 프레임에 대해 다른 점이 있습니까? 그들은 show을 사용하여 동일하게 보이고, 수집 될 때 위의 collect 출력은 실제 데이터입니다. 문제가 있습니다. 왜 unionAll에 대한 통찰력이 여기에 좋을까요?

편집 : 장난감 데이터를 가지고 최소한의 재생산 가능한 예를 만들 수 없었습니다. 즉 임의의 값을 평행으로 설정하고 설명을 작성한 다음 행을 작성하여 설명, 잘 작동합니다. 이것은 내 데이터 나 방법론에 어떤 것이 있는지를 알리는 특별한 것을 제안합니다. 분명히 이것은 여기에 솔루션을 찾는 것이 더 슬림 해 지므로 사전에 사과드립니다.

+0

이전 버전 중 하나에 버그가 있다고 생각하지만 사용하는 버전이 [mcve]라면 좋을 것입니다. – zero323

+0

방금 ​​그것에 대해 편집을 추가했습니다. 문제를 재현 할 수있을 때까지 질문을 삭제해야 할 수도 있습니다. – Jeff

+0

허, 나는 아직도이 문제를 본 적이있다. 그러나 나는 정말로 어디에 있는지를 생각할 수 없다. 한 가지 방법 또는 다른 방법으로는 코드가 혼자서 해결할 수 없을 수도 있습니다. – zero323

답변

관련 문제