是否可以通过.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"','RRRR',50
 ]

是否可以通过编程/自动方式设置数据集的架构?

解决方法

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

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

然后应用以下设置,这将在您的情况下产生所需的结果:

schema editor

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

final dataset

,

从此示例开始:

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();