加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java-CSV内容被Spark读取为null

发布时间:2020-12-14 19:30:43 所属栏目:Java 来源:网络整理
导读:我正在尝试读取CSV文件,以便可以使用Spark SQL查询它. CSV如下所示: 16;10;9/6/2018 CSV文件不包含标题,但是我们知道第一列是部门代码,第二列是建筑代码,第三列是格式为m / d / YYYY的日期. 我编写了以下代码以使用自定义架构加载CSV文件: StructType sch

我正在尝试读取CSV文件,以便可以使用Spark SQL查询它. CSV如下所示:

16;10;9/6/2018

CSV文件不包含标题,但是我们知道第一列是部门代码,第二列是建筑代码,第三列是格式为m / d / YYYY的日期.

我编写了以下代码以使用自定义架构加载CSV文件:

 StructType sch = DataTypes.createStructType(new StructField[] {
            DataTypes.createStructField("department",DataTypes.IntegerType,true),DataTypes.createStructField("building",false),DataTypes.createStructField("date",DataTypes.DateType,});
    Dataset<Row> csvLoad = sparkSession.read().format("csv")
            .option("delimiter",";")
            .schema(sch)
            .option("header","false")
            .load(somefilePath);
    csvLoad.show(2);

当我使用csvLoad.show(2)时,仅显示以下输出:

|department|building|date|
+----------+---------+---+
|null      |null     |null |
|null      |null     |null |

谁能告诉我代码中有什么问题吗?我正在使用spark 2.4版本.

最佳答案
问题在于您的日期字段,因为它具有自定义格式,因此您需要将格式指定为选项:

Dataset<Row> csvLoad = sparkSession.read().format("csv")
        .option("delimiter",";")
        .schema(sch)
        .option("header","false")
        .option("dateFormat","m/d/YYYY")
        .load(somefilePath);

这将导致输出:

+----------+--------+----------+
|department|building|      date|
+----------+--------+----------+
|        16|      10|2018-01-06|
+----------+--------+----------+

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读