小编M-T*_*ier的帖子

使用 Spark 读取欧洲格式的 .csv 数据

我目前正在用 Apache Spark 做我的第一次尝试。我想读取带有 SQLContext 对象的 .csv 文件,但 Spark 不会提供正确的结果,因为该文件是欧洲文件(逗号作为小数分隔符,分号用作值分隔符)。有没有办法告诉 Spark 遵循不同的 .csv 语法?

val conf = new SparkConf()
            .setMaster("local[8]")
            .setAppName("Foo")

val sc = new SparkContext(conf)

val sqlContext = new SQLContext(sc)

val df = sqlContext.read
            .format("org.apache.spark.sql.execution.datasources.csv.CSVFileFormat")
            .option("header","true")
            .option("inferSchema","true")
            .load("data.csv")

df.show()
Run Code Online (Sandbox Code Playgroud)

相关 .csv 中的一行如下所示:

04.10.2016;12:51:00;1,1;0,41;0,416
Run Code Online (Sandbox Code Playgroud)

Spark 将整行解释为一列。df.show()印刷:

+--------------------------------+
|Col1;Col2,Col3;Col4;Col5        |
+--------------------------------+
|            04.10.2016;12:51:...|
+--------------------------------+
Run Code Online (Sandbox Code Playgroud)

在以前的尝试中,它df.show()甚至打印了更多的行内容,现在它显示“...”,但最终在第三列的逗号处切割行。

csv syntax scala apache-spark

4
推荐指数
1
解决办法
2044
查看次数

(Scala) 在 Apache Spark 中将字符串转换为日期

我想用 Spark 读取 .csv 文件并将列与拟合类型相关联。

    val conf = new SparkConf()
        .setMaster("local[8]")
        .setAppName("Name")

    val sc = new SparkContext(conf)

    val sqlContext = new SQLContext(sc)

    val customSchema = StructType(Array(
        StructField("date", DateType, true),
        StructField("time",StringType, true),
        StructField("am", DoubleType, true),
        StructField("hum", DoubleType, true),
        StructField("temp", DoubleType, true)
    ))

    val df = sqlContext.read
            .format("org.apache.spark.sql.execution.datasources.csv.CSVFileFormat")
            .option("header","true")
            .option("delimiter",";")
            .schema(customSchema)
            .load("data.csv")
Run Code Online (Sandbox Code Playgroud)

我正在阅读的一行 .csv 看起来像这样

+----------+--------+-----+-----+-----+
|      date|    time|   am|  hum| temp|
+----------+--------+-----+-----+-----+
|04.10.2016|12:51:20|1.121|0.149|0.462|
+----------+--------+-----+-----+-----+
Run Code Online (Sandbox Code Playgroud)

如果我将日期的类型设置为字符串,Spark 将读取 .csv 并正确关联类型。如果我像上面显示的代码一样保留 customSchema,由于日期格式错误,Spark 将抛出异常(DateType will expect YYYY-MM-DD while mine is DD.MM.YYYY).

有没有办法将日期字符串重新格式化为 YYYY-MM-DD 并在之后应用架构?或者我也可以通过添加参数来改变 …

sql csv scala apache-spark

4
推荐指数
1
解决办法
7436
查看次数

标签 统计

apache-spark ×2

csv ×2

scala ×2

sql ×1

syntax ×1