Machine learning 尝试在Spark结构化流媒体中使用sklearn库

Machine learning 尝试在Spark结构化流媒体中使用sklearn库,machine-learning,scikit-learn,pyspark,apache-kafka,Machine Learning,Scikit Learn,Pyspark,Apache Kafka,我想使用Kafka和Spark structured streaming对流数据进行预处理。目前的想法是: 每次我从Kafka源接收一批数据时,我希望在该批数据上实现一个函数,如下所示: def use_label_encoder(label_encoder, y): return label_encoder.transform(y) + 1 to_transform_class_val = udf(use_label_encoder, IntegerType()) 以下是模式: sc

我想使用Kafka和Spark structured streaming对流数据进行预处理。目前的想法是:

每次我从Kafka源接收一批数据时,我希望在该批数据上实现一个函数,如下所示:

def use_label_encoder(label_encoder, y):
   return label_encoder.transform(y) + 1

to_transform_class_val = udf(use_label_encoder, IntegerType())
以下是模式:

schema = StructType([
StructField("sepal_length_in_cm", StringType()), \
StructField("sepal_width_in_cm", StringType()), \
StructField("petal_length_in_cm", StringType()), \
StructField("petal_width_in_cm", StringType()), \
StructField("class", StringType())
])

df = df.selectExpr("CAST(value AS STRING)")
df1 = df.select(from_json(df.value, schema).alias("json"))
当我尝试定义标签\u编码器时:

label_encoder = enc.fit(df1.select(to_upper("json.class")))
它给出了一个错误“错误的输入形状”

我用于非流数据的等效代码是:

y = df['class'].values
enc = LabelEncoder()
label_encoder = enc.fit(y)
y = label_encoder.transform(y) + 1

有谁能帮助我如何在流式数据上应用sklearn方法吗?

您能稍后添加1吗?你的星火密码会变成

def use_label_encoder(label_encoder, y):
    return label_encoder.transform(y)

to_transform_class_val = udf(use_label_encoder, IntegerType())

df = df.withColumn('new_col', to_transform_class_val(label_encoder, 'old_column'))
df = df.withColumn('label_enc', col('new_col') + lit(1))

use_label_encoder方法有2个参数,但在调用该方法时只传递一个参数。。答案中已更正。但我无法定义标签编码器本身。问题摘录:当我试图定义label_encoder:label_encoder=enc.fit(df1.select(to_upper(“json.class”))时,它给出了一个错误“错误的输入形状”