Apache spark 结构化流媒体如何执行pandas_udf?

Apache spark 结构化流媒体如何执行pandas_udf?,apache-spark,pyspark,spark-structured-streaming,Apache Spark,Pyspark,Spark Structured Streaming,我想了解结构化流媒体是如何处理新数据的 如果更多行同时到达,spark会将它们附加到输入流数据帧中,对吗 如果我有一个With列并应用pandas_udf,那么每行调用一次函数,或者只调用一次,然后将这些行传递给pandas_udf 让我们这样说: dfInt = spark \ .readStream \ .load() \ .withColumn("prediction", predict( (F.struct([col(x) for x in (features)]

我想了解结构化流媒体是如何处理新数据的

如果更多行同时到达,spark会将它们附加到输入流数据帧中,对吗

如果我有一个With列并应用pandas_udf,那么每行调用一次函数,或者只调用一次,然后将这些行传递给pandas_udf

让我们这样说:

dfInt = spark \
    .readStream \
    .load() \
    .withColumn("prediction", predict( (F.struct([col(x) for x in (features)]))))
如果多行同时到达,它们将一起处理还是每个行处理一次= 是否有机会将此限制为每次仅一行

如果更多行同时到达,spark会将它们附加到输入流数据帧中,对吗

我们只讨论微批处理执行引擎,对吗?这是您在流式查询中最可能使用的内容

结构化流使用(DataSource API V1)查询流查询中的流源:

getBatch(开始:选项[Offset],结束:Offset):数据帧

返回偏移量之间的数据(
start
end
)。当
start
None
时,批次应以第一条记录开始

无论源在
数据帧中返回什么,都是要在微批处理中处理的数据

如果我有一个WITH列并应用一个udf,那么每行调用一次函数

始终如此。这就是用户定义函数在Spark SQL中的工作方式

或者只有一次,并且行被传递给pandas_udf

说:

Pandas UDF是用户定义的函数,Spark使用箭头传输数据,Pandas使用数据

Python函数应将
pandas.Series
作为输入,并返回相同长度的
pandas.Series
。在内部,Spark将通过将列拆分为批并调用每个批的函数作为数据的子集来执行pandas UDF,然后将结果连接在一起

如果多行同时到达,它们将一起处理还是每个行处理一次

如果“到达”表示“单个数据帧的一部分”,则“它们一起处理”,但一次一行(根据UDF合同)

是否有机会将此限制为每次仅一行


你不必这么做。这是设计的。一次只能有一行。

非常感谢你提供的详细答案。我解决了我的问题,将pandas系列中的所有行分类到pandas udf中。你能告诉我我们是否可以在scala中使用pandas_udf吗?我们使用pandas_udf时遇到一些性能和内存错误。谢谢you@xcsobP在scala中使用pandas_udf?不可能。实际上你不需要它。纯udf应该很好用。如果它对你有用,你能接受答案吗?谢谢。我需要pandas_udf,因为我使用的是scikit模型来分类流式数据。我如何使用纯udf实现这一点?我认为这是不可能的,但我建议问一个单独的问题继续。谢谢你接受答案!