我有一个我想用Spark阅读的csv文件,指定一个模式来获取我需要的类型。这样的事情:
Dataset<Row> ds = sqlContext.read()
.format("csv")
.option("header", "false")
.schema(customSchema)
.load("myCsvFilePath.csv");
但是在我的csv文件中,某些列以非标准方式记录,例如,double值使用逗号作为小数分隔符,或者datetime值是格式化为dd.MM.yyyy的字符串。 是否可以定义这样的模式?或者我应该将这些列作为字符串阅读,然后明确解析它们?
答案 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"))