我有一个csv文件,我想用Spark读取它,指定一个模式来获取我需要的类型。诸如此类:
Dataset<Row> ds = sqlContext.read() .format("csv") .option("header", "false") .schema(customSchema) .load("myCsvFilePath.csv");
但在我的csv文件中,有些列是以非标准方式记录的,例如,双精度值使用逗号作为十进制分隔符,或者日期时间值是格式为dd.MM的字符串。yyyy年。 是否可以定义这样的模式?或者我应该将这些列作为字符串读取,然后显式解析它们?
将奇数格式转换为标准格式是您希望使用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"))