gpt4 book ai didi

apache-spark - Spark csv到数据框跳过第一行

转载 作者:行者123 更新时间:2023-12-04 04:19:24 27 4
gpt4 key购买 nike

我正在使用 - 将 csv 加载到数据框

sqlContext.read.format("com.databricks.spark.csv").option("header", "true").
option("delimiter", ",").load("file.csv")

但我的输入文件在第一行包含日期,第二行包含标题。
例子
20160612
id,name,age
1,abc,12
2,bcd,33

如何在将 csv 转换为数据框时跳过第一行?

最佳答案

以下是我能想到的几个选项,因为数据 block 模块似乎没有提供跳线选项:

选项一 :在第一行前面添加一个“#”字符,该行将自动被视为注释并被data.bricks csv模块忽略;

选项二 : 创建您的自定义模式并指定 mode选项为 DROPMALFORMED这将删除第一行,因为它包含的 token 少于 customSchema 中的预期:

import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType};

val customSchema = StructType(Array(StructField("id", IntegerType, true),
StructField("name", StringType, true),
StructField("age", IntegerType, true)))

val df = sqlContext.read.format("com.databricks.spark.csv").
option("header", "true").
option("mode", "DROPMALFORMED").
schema(customSchema).load("test.txt")

df.show

16/06/12 21:24:05 WARN CsvRelation$: Number format exception. Dropping malformed line: id,name,age


+---+----+---+
| id|name|age|
+---+----+---+
| 1| abc| 12|
| 2| bcd| 33|
+---+----+---+

请注意此处的警告消息,其中显示已删除格式错误的行:

选项三 :编写您自己的解析器以删除长度不为三的行:
val file = sc.textFile("pathToYourCsvFile")

val df = file.map(line => line.split(",")).
filter(lines => lines.length == 3 && lines(0)!= "id").
map(row => (row(0), row(1), row(2))).
toDF("id", "name", "age")

df.show
+---+----+---+
| id|name|age|
+---+----+---+
| 1| abc| 12|
| 2| bcd| 33|
+---+----+---+

关于apache-spark - Spark csv到数据框跳过第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37778369/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com