Apache spark 结构化流媒体如何执行pandas_udf?
我想了解结构化流媒体是如何处理新数据的 如果更多行同时到达,spark会将它们附加到输入流数据帧中,对吗 如果我有一个With列并应用pandas_udf,那么每行调用一次函数,或者只调用一次,然后将这些行传递给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)]
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实现这一点?我认为这是不可能的,但我建议问一个单独的问题继续。谢谢你接受答案!