有没有办法以编程方式从 .csv 设置数据集的架构

Is there a way to programmatically set a dataset's schema from a .csv

例如,我有一个 .csv,它使用 Excel 方言,它使用类似 Python 的 csv 模块 doubleQuote 来转义引号。

例如,考虑以下行:

"XX ""YYYYYYYY"", ZZZZZZ ""QQQQQQ""","JJJJ ""MMMM"", RRRR ""TTTT""",1234,RRRR,60,50

我希望模式变成:

 [
   'XX "YYYYYYYY", ZZZZZZ "QQQQQQ"',
   'JJJJ "MMMM", RRRR "TTTT"',
   1234,
   'RRRR',
   60,
   50
 ]

有没有办法以 programmatic/automated 方式设置数据集的架构?

从这个例子开始:

Dataset<Row> dataset = files
        .sparkSession()
        .read()
        .option("inferSchema", "true")
        .csv(csvDataset);

output.getDataFrameWriter(dataset).write();

添加 headerquoteescape 选项,如下所示:

Dataset<Row> dataset = files
        .sparkSession()
        .read()
        .option("inferSchema", "true")
        .option("header", "true")
        .option("quote", "\"")
        .option("escape", "\"")
        .csv(csvDataset);

output.getDataFrameWriter(dataset).write();  

虽然您可以在代码中执行此操作,但代工厂 dataset-app 也可以在本地执行此操作。这意味着您可以跳过编写代码(这很好),但也意味着您可以在管道中节省一个步骤(这可能会节省您的运行时间。)

将文件上传到数据集后,在数据集上按“编辑架构”:

然后应用如下设置,这将在您的案例中产生预期的结果:

然后按“保存并验证”,数据集应该以正确的模式结束: