代码之家  ›  专栏  ›  技术社区  ›  Vladimir Kravets

在Spark中加载CSV,类型为非标准格式

  •  1
  • Vladimir Kravets  · 技术社区  · 8 年前

    我有一个csv文件,我想用Spark读取它,指定一个模式来获取我需要的类型。诸如此类:

    Dataset<Row> ds = sqlContext.read()
        .format("csv")
        .option("header", "false")
        .schema(customSchema)
        .load("myCsvFilePath.csv");
    

    但在我的csv文件中,有些列是以非标准方式记录的,例如,双精度值使用逗号作为十进制分隔符,或者日期时间值是格式为dd.MM的字符串。yyyy年。 是否可以定义这样的模式?或者我应该将这些列作为字符串读取,然后显式解析它们?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Arnon Rotem-Gal-Oz    8 年前

    将奇数格式转换为标准格式是您希望使用spark的dataprep管道的一部分,因此可以将这些列作为字符串读取,然后使用内置函数或udf将列替换为固定的列(例如使用withColumn)

    import org.apache.spark.sql.functions._ 
    
    df.withColumn("fixed_date",unix_timestamp(col("date_column"),"dd.MM.YYYY")).withColumn("fixed_double",regexp_replace(col("double_column"),",",".").cast("double"))