Как передать гистограмму привязки udf в pydeequ?

#python #apache-spark #pyspark #apache-spark-sql #amazon-deequ

Вопрос:

Я не могу передать binningudf в анализатор гистограмм pydeequ. Не мог бы кто-нибудь, пожалуйста, помочь

 import pyspark
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, udf
from pyspark.sql.types import StringType, IntegerType

spark = SparkSession.builder.appName('SparkByExamples.com').getOrCreate()

columns = ["Seqno","Name"]
data = [("1", "john jones"),
    ("3", "tracey smith"),
    ("3", "amy sanders"),("2", "amy sanders"),("4", "amy sanders"),("5", "amy sanders")]

df = spark.createDataFrame(data=data,schema=columns)

def createBucket(x):
    if int(x)>2: return 1
    else: return 2

createBucketUdf = udf(lambda z: createBucket(z), IntegerType())

analysisResult = AnalysisRunner(spark).onData(df) 
                    .addAnalyzer(Histogram("SeqNo",binningUdf=lambda z: createBucket(z))) 
                    .run()
                    
result_df = AnalyzerContext.successMetricsAsDataFrame(spark, analysisResult)
result_df.show()
 

Приведенный выше код выдает ошибку, говорящую

 AttributeError: 'function' object has no attribute '_get_object_id'
 

Похоже, что вышеприведенная ошибка связана с неправильным типом параметра. Поэтому я попытался использовать лямбду в качестве строки. Но потом я получил ответ ниже

  ------ -------- ---- ----- 
|entity|instance|name|value|
 ------ -------- ---- ----- 
 ------ -------- ---- -----