【问题标题】:How to render image in a filtered Spark DataFrame如何在过滤的 Spark DataFrame 中渲染图像
【发布时间】:2022-06-11 01:35:19
【问题描述】:

我已使用 Spark 将数据表加载到 DataBricks 中包含图像(content 列)的 DataFrame:

df_test = (spark.read.format("delta").table(data_table)).select(col("content"), col("label_index"))

它可以正确显示带有display(df_test) 的图像。

但是在对数据框上的行进行一些过滤后,显示不再起作用:

a = [3,6,9]
df_test_filtered = [df_test.collect()[i] for i in a]
display(df_test_filtered)

我知道df_test_filtered 现在是一个行列表,所以我也尝试将它转换回适当的 DataFrame,如下所示:

df_test_cols = df_test.columns
df_test2 = spark.createDataFrame(data=df_test_filtered, schema = df_test_cols)
display(df_test2)

在这两种情况下,结果都是这样的:

如果我关闭原始(未过滤)数据帧的显示图像预览复选框,那将是我得到的原始二进制内容:

但是对于过滤后的,我没有这个复选框。显然根据文档: https://docs.microsoft.com/en-us/azure/databricks/notebooks/visualizations/#display-image-type

display 方法应该自动识别图像,但它没有。知道如何强制它正确显示它们吗?

【问题讨论】:

    标签: image apache-spark pyspark azure-databricks


    【解决方案1】:

    我认为它不再起作用了,因为您离开了 pyspark 上下文。您可以留在 pyspark 中进行过滤,而不是收集。

    如果您想过滤行,例如3,6,9 你可以使用pyspark函数monotonically_increasing_id()分配一个行号

    df = df.withColumn('id', monotonically_increasing_id())
    df = df.withColumn('row_number', row_number().over(Window.orderBy('id')))
    

    然后您可以使用filter() 过滤到具有您需要的行号的行。

    df = df.filter("row_number IN (3,6,9)")
    

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多