Я использую искру, чтобы прочитать CSV. В моем csv-файле у меня есть два столбца с именами TradeDate и SettleDate, которые имеют тип даты в формате yyyyMMdd, как вы можете видеть в печати ниже:
И я читаю CSV-файл следующим образом:
public static DataFrame ReadFile(string path, FileConfiguration fileconfig, SparkSession spark)
{
bool hasHeader = fileconfig.FileLoaderFileContainsHeader != 0 || fileconfig.FileLoaderNumberOfLinesToSkip != 0;
return spark
.Read()
.Option("delimiter", fileconfig.FileLoaderColumnSeparator)
.Option("header", hasHeader)
.Option("inferSchema", true)
.Option("dateFormat", "yyyyMMdd")
.Csv(path);
}
Я также пытался:
public static DataFrame ReadFile(string path, FileConfiguration fileconfig, SparkSession spark)
{
bool hasHeader = fileconfig.FileLoaderFileContainsHeader != 0 || fileconfig.FileLoaderNumberOfLinesToSkip != 0;
return spark
.Read()
.Option("delimiter", fileconfig.FileLoaderColumnSeparator)
.Option("header", hasHeader)
.Option("inferSchema", true)
.Option("TimeStampFormat", "yyyyMMdd")
.Csv(path);
}
Но проблема в том, что когда я делаю DataFrame.PrintSchema (), эти столбцы извлекаются как целое число
DataFrame DataframeSource = FileService.ReadFile(AppConfiguration.PathSource, fileConfigurationSource, spark);
DataframeSource.PrintSchema();
Я не могу преобразовать столбцы в формате даты «в руке», потому что я использую этот сценарий для работы с несколькими файлами CSV, и имена столбцов отличаются, несмотря на то, что формат даты является одни и те же. Например, в этом CSV-файле имя столбца - TradeDate, а в другом - FixDate, поэтому я должен сделать это в момент импорта
