Как переопределить имена столбцов в CSV-файл с пользовательской схемой? - PullRequest
0 голосов
/ 12 марта 2019

У меня есть CSV-файл с заголовками и такими данными:

Date,Transaction,Name,Memo,Amount
12/31/2018,DEBIT,Amazon stuff,24000978364666403396802,-62.48

Я хочу переопределить имена столбцов, чтобы они были такими:

transaction,credit_debit,description,memo,amount

Вот как вручную указать схему, которую я хочу использовать, и затем прочитать файл:

        StructType schema = DataTypes.createStructType(new StructField[] {
                DataTypes.createStructField("transaction_date",  DataTypes.TimestampType, true),
                DataTypes.createStructField("credit_debit", DataTypes.StringType, true),
                DataTypes.createStructField("description", DataTypes.StringType, true),
                DataTypes.createStructField("memo", DataTypes.StringType, true),
                DataTypes.createStructField("amount", DataTypes.DoubleType, true)
        });



        String csvPath = "input/mytransactions.csv";
        DataFrameReader dataFrameReader = spark.read();
        Dataset<Row> dataFrame = 
            dataFrameReader
            .format("org.apache.spark.csv")
            .option("header","true")
            .option("inferSchema", false)
            .schema(schema)
            .csv(csvPath);
        dataFrame.show(20);

Но когда я это делаю, фактические значения столбца равны нулю, когда я читаю файл.

+----------------+------------+-----------+----+------+
|transaction_date|credit_debit|description|memo|amount|
+----------------+------------+-----------+----+------+
|            null|        null|       null|null|  null|
|            null|        null|       null|null|  null|
|            null|        null|       null|null|  null|

Есть идеи, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Я хотел переименовать столбцы.Это делает это:

        Dataset<Row> dataFrame = 
                dataFrameReader
                .format("org.apache.spark.csv")
                .option("header","true")
                .option("inferSchema", true)
                .csv(csvPath);

        // Rename Columns
        dataFrame = dataFrame.toDF("transaction_date","debit_credit", "description", "memo", "amount");
0 голосов
/ 12 марта 2019

Проблема со столбцом даты, и вы пропускаете опцию csv с именем dateFormat. Код ниже.

     StructType schema = DataTypes.createStructType(new StructField[] {
                DataTypes.createStructField("transaction_date",  DataTypes.DateType, true),
                DataTypes.createStructField("credit_debit", DataTypes.StringType, true),
                DataTypes.createStructField("description", DataTypes.StringType, true),
                DataTypes.createStructField("memo", DataTypes.StringType, true),
                DataTypes.createStructField("amount", DataTypes.DoubleType, true)
        });
Dataset<Row> dataFrame = 
            dataFrameReader
            .format("org.apache.spark.csv")
            .option("header","true")
    .option("dateFormat", "MM/dd/YYYY")
            .option("inferSchema", false)
            .schema(schema)
            .csv(csvPath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...