【问题标题】:Load a CSV file from line 17 of the file in scala spark从 scala spark 文件的第 17 行加载 CSV 文件
【发布时间】:2018-08-17 17:35:01
【问题描述】:

我对 scala 中的 spark 数据框有疑问。我正在使用方法var df = spark.read.format("csv").load("csvfile.csv") 来读取CSV 文件并将其存储在DF 中。我的 CSV 文件有 16 行我不想阅读的一些 cmets。我还没有找到避免标题的方法,但它只有一行。任何想法?

谢谢。

【问题讨论】:

  • comment 用于 spark csv 加载...
  • cmets 是否被任何东西分隔?
  • 我不能使用coment 方式,因为它们必须以“#”开头,但就我而言,我的行以任何字符开头,我无法更改。了解 cmets 限制的唯一方法是它们总是占用 16 行。
  • 您可以对任何符号使用注释选项。它适用于数字/特殊字符/字母。

标签: scala apache-spark apache-spark-sql


【解决方案1】:

以下解决方案 1 仅适用于仅以一个常见符号/字母开头的 cmets。解决方案2适用于解决方案中添加到列表中的所有符号。

解决方案 1:

如果所有 cmets 都以通用字母/符号/数字开头,请在键 commentoption 值中给出该符号,如本答案所示。

Apache Spark Dataframe - Load data from nth line of a CSV file

但如果某些 cmets 以与其他 cmets 不同的符号开头,这将无法解决。

解决方案 2:

在此解决方案中,我将删除以符号 */ 和数字 7 开头的行。根据实际 cmets 的起始字母替换 List 值。

import ss.implicits._

val rd = ss.sparkContext.textFile(path)

rd.filter(x => !List('*','7','/').contains(x.charAt(0))) // reading file as RDD and filtering records starting with comment letters or symbols or alphabets
.map(x => x.split(","))
.map(x => (x(0),x(1),x(2),x(3)))
.toDF("id","name","department","amount")
.show()

输入:

*ghfghfgh
*mgffhfg
/fgfgdfgf
7gdfgh
1,Praveen,d1,30000
2,naveen,d1,40000
3,pavan,d1,50000

输出:

+---+-------+----------+------+
| id|   name|department|amount|
+---+-------+----------+------+
|  1|Praveen|        d1| 30000|
|  2| naveen|        d1| 40000|
|  3|  pavan|        d1| 50000|
+---+-------+----------+------+

在上面的例子中,输入的前四行是 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-16
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2015-06-24
    相关资源
    最近更新 更多