Databricks:结构流数据分配和显示

Databricks : structure stream data assignment and display

我在数据块笔记本 (python) 中有以下流代码。

from pyspark.sql import SparkSession
from pyspark.sql.functions import explode
from pyspark.sql.functions import split

spark = SparkSession \
    .builder \
    .appName("MyTest") \
    .getOrCreate()

# Create a streaming DataFrame
lines = spark.readStream \
    .format("delta") \
    .table("myschema.streamTest")

在笔记本2中,我有

def foreach_batch_function(df, epoch_id):
    test = df
    print(test['simplecolumn'])
    display(test['simplecolumn'])
    test['simplecolumn'].display

lines.writeStream.outputMode("append").foreachBatch(foreach_batch_function).format('console').start()

当我执行上面的代码时,我在哪里可以看到 .display 函数的输出?我查看了集群驱动程序日志,但没有看到任何内容。除了成功初始化和执行的流外,我在执行时也看不到笔记本本身的任何内容。我确实看到数据框参数数据显示在控制台中,但我试图查看分配测试是否成功。

我正在尝试将这种操作作为时间序列操作的先驱,用于实时模型评分的小批量和 python - 但我正在努力在结构化流中获得正确的基础知识世界。工作模型运行但每 10-15 分钟执行一次。我想通过流使其实时,因此这个问题。

您将不同的东西混合在一起 - 我建议阅读 structured streaming documentation or chapter 8 of Learning Spark, 2ed book (freely available from here) 的初始部分。

您可以直接在流上使用 display function,例如(使用 checkpointLocationtrigger 参数效果更好,如文档中所述):

display(lines)

关于评分——通常是通过定义用户定义的函数并将其作为数据帧的 selectwithColumn 函数应用于流来完成的。最简单的方法是在 MLflow 注册表中注册一个模型,然后使用内置函数加载模型,例如:

import mlflow.pyfunc

pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri)
preds = lines.withColumn("predictions", pyfunc_udf(params...))

查看 notebook 中的示例。