使用非标准格式的类型在Spark中加载CSV

时间:2018-04-17 03:27:42

标签: csv parsing apache-spark schema apache-spark-dataset

我有一个我想用Spark阅读的csv文件,指定一个模式来获取我需要的类型。这样的事情:

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

但是在我的csv文件中,某些列以非标准方式记录,例如,double值使用逗号作为小数分隔符,或者datetime值是格式化为dd.MM.yyyy的字符串。 是否可以定义这样的模式?或者我应该将这些列作为字符串阅读,然后明确解析它们?

1 个答案:

答案 0 :(得分:2)

将奇数格式转换为标准格式是您想要使用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"))