簡體   English   中英

如何從 Palantir Foundry 的 PySpark 模式創建一個空數據集?

[英]How can I create an empty dataset from on a PySpark schema in Palantir Foundry?

我有一個 PySpark 模式,它描述了數據集的列及其類型(我可以手動編寫,或者通過轉到“列”選項卡,然后“復制 PySpark 模式”從現有數據集中獲取)。

我想要一個具有此模式的空數據集,例如,它可以用作僅寫回本體 object 的支持數據集。 如何在 Foundry 中創建它?

您可以使用 Spark 上下文創建一個空數據集,以使用架構創建 dataframe,例如:

from pyspark.sql import types as T
from transforms.api import transform_df, configure, Output

SCHEMA = T.StructType([
    T.StructField('entity_name', T.StringType()),
    T.StructField('thing_value', T.IntegerType()),
    T.StructField('created_at', T.TimestampType()),
])


# Given there is no work to do, save on compute by running it on the driver
@configure(profile=["KUBERNETES_NO_EXECUTORS"])
@transform_df(
    Output("/some/dataset/path/or/rid"),
)
def compute(ctx):
    return ctx.spark_session.createDataFrame([], schema=SCHEMA)

要在 Java 中執行此操作,您可以在TransformContext上使用 Spark session 創建一個轉換:

package myproject.datasets;

import com.palantir.transforms.lang.java.api.Compute;
import com.palantir.transforms.lang.java.api.Output;
import com.palantir.transforms.lang.java.api.TransformProfiles;
import com.palantir.transforms.lang.java.api.TransformContext;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.*;
import java.util.List;

public final class MyTransform {

    private static final StructType SCHEMA = new StructType()
        .add(new StructField("entity_name", DataTypes.StringType, true, Metadata.empty()))
        .add(new StructField("thing_value", DataTypes.IntegerType, true, Metadata.empty()))
        .add(new StructField("created_at", DataTypes.TimestampType, true, Metadata.empty()));

    @Compute
    // Given there is no work to do, save on compute by running it on the driver
    @TransformProfiles({ "KUBERNETES_NO_EXECUTORS_SMALL" })
    @Output("/some/dataset/path/or/rid")
    public Dataset<Row> myComputeFunction(TransformContext context) {
        return context.sparkSession().createDataFrame(List.of(), SCHEMA);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM