왜 이런 식으로 작동하지 않는지보십시오. 먼저 행 유형 에서 정수를 가져 오려고 합니다. 수집 결과는 다음과 같습니다.
>>> mvv_list = mvv_count_df.select('mvv').collect()
>>> mvv_list[0]
Out: Row(mvv=1)
다음과 같은 것을 취하면 :
>>> firstvalue = mvv_list[0].mvv
Out: 1
당신은 mvv
가치 를 얻을 것 입니다. 배열의 모든 정보를 원하면 다음과 같이 할 수 있습니다.
>>> mvv_array = [int(row.mvv) for row in mvv_list.collect()]
>>> mvv_array
Out: [1,2,3,4]
그러나 다른 열에 대해 동일하게 시도하면 다음과 같은 결과가 나타납니다.
>>> mvv_count = [int(row.count) for row in mvv_list.collect()]
Out: TypeError: int() argument must be a string or a number, not 'builtin_function_or_method'
이것은 count
내장 메서드 이기 때문에 발생합니다 . 그리고 열의 이름은 count
. 이를위한 해결 방법은 열 이름을 다음 count
과 _count
같이 변경하는 것입니다 .
>>> mvv_list = mvv_list.selectExpr("mvv as mvv", "count as _count")
>>> mvv_count = [int(row._count) for row in mvv_list.collect()]
그러나 사전 구문을 사용하여 열에 액세스 할 수 있으므로이 해결 방법은 필요하지 않습니다.
>>> mvv_array = [int(row['mvv']) for row in mvv_list.collect()]
>>> mvv_count = [int(row['count']) for row in mvv_list.collect()]
그리고 마침내 작동합니다!
list(df.select('mvv').toPandas()['mvv'])
.. Arrow는 PySpark에 통합되어toPandas
상당히 빨라졌습니다 . Spark 2.3 이상을 사용하는 경우 다른 접근 방식을 사용하지 마십시오. 자세한 벤치마킹 세부 정보는 내 대답을 참조하십시오.