SparkSQL UDF 반환 형식 은 NUMPY 형식 을 포함 할 수 없습니다.
8972 단어 빅 데이터
Spark 버 전: 2.1.1
질문: SparkSQL UDF 반환 형식 은 NUMPY 형식 을 포함 합 니 다.
PickleException: expected zero arguments for construction of ClassDict (for numpy.dtype)
아래 코드 에서 보 듯 이 정 의 된 udf 반환 형식 은 dict 를 포함 하 는 list 입 니 다. udf 에 배열 순 서 를 추가 하고 기본 값 을 부여 합 니 다. 이렇게 쓰 면 상기 오 류 를 보고 합 니 다.
import pandas as pd
from pyspark.sql import functions as F
from pyspark.sql.types import MapType, StringType, ArrayType
def calc_allocate(collect_list):
df_assign = pd.DataFrame(collect_list)
#
df_assign["rank"] = range(1, df_assign.shape[0] + 1)
return_allocate = []
for i in range(1, df_assign.shape[0] + 1):
allocate_dict = dict()
allocate_dict["id"] = df_assign.loc[df_assign["rank"] == i, "id"].values[0]
allocate_dict["rank"] = df_assign.loc[df_assign["rank"] == i, "rank"].values[0]
return_allocate.append(allocate_dict)
return return_allocate
if __name__ == '__main__':
collect_list = [
{u'id': u'1'},
{u'id': u'2'},
{u'id': u'3'},
{u'id': u'4'},
{u'id': u'5'}
]
data_allocate_compute = calc_allocate(collect_list)
# udf
udf_calc_allocate = F.udf(collect_list, returnType=ArrayType(MapType(StringType(), StringType())))
Spark 2.1.1 의 공식 문 서 를 참고 하면 SparkSQL 은 numpy 의 데이터 형식 과 같은 인용 형식 을 사용 할 수 없습니다.
Python DataTypes No Longer Singletons
When using DataTypes in Python you will need to construct them (i.e.
StringType()
) instead of referencing a singleton. -- 발췌http://spark.apache.org/docs/2.1.1/sql-programming-guide.html#python-datatypes-no-longer-singletons
필드 형식 을 보면 알 수 있 듯 이 배열 배열 'rank' 을 추가 할 때 유형 은 numpy. int 64 이기 때문에 오류 가 발생 할 수 있 습 니 다.
print type(df_assign.loc[df_assign["rank"] == i, "rank"].values[0])
해결 방법: 값 을 할당 할 때 python 기본 형식 을 강제로 변환 합 니 다.
allocate_dict["rank"] = int(df_assign.loc[df_assign["rank"] == i, "rank"].values[0])
높 은 버 전에 서 는 2.4.3 과 같은 새로운 문 서 를 numpy 로 되 돌려 주 는 것 을 지원 합 니 다.
http://spark.apache.org/docs/latest/sql-pyspark-pandas-with-arrow.html#pandas-udfs-aka-vectorized-udfs
저작권 성명: 본 고 는 블 로 거들 의 오리지널 글 로 블 로 거들 의 허락 없 이 서명 (BY): dkjkls (dkj 칼 로 스) 글 의 출처 를 전재 할 수 없습니다.http://blog.csdn.net/dkjkls
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spark 의 2: 원리 소개Google Map/Reduce 를 바탕 으로 이 루어 진 Hadoop 은 개발 자 에 게 map, reduce 원 어 를 제공 하여 병렬 일괄 처리 프로그램 을 매우 간단 하고 아름 답 게 만 들 었 습 니 다.S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.