Apache Spark Dataframe - 从 CSV 文件的第 n 行加载数据

Posted

技术标签:

【中文标题】Apache Spark Dataframe - 从 CSV 文件的第 n 行加载数据【英文标题】:Apache Spark Dataframe - Load data from nth line of a CSV file 【发布时间】:2017-03-26 12:58:32 【问题描述】:

我想处理一个巨大的订单 CSV 文件 (5GB),文件开头有一些元数据行。 标题列在第 4 行(以“h”开头)中表示,然后是另一个元数据行,描述可选性。数据行以“d”开头

m,Version,v1.0
m,Type,xx
m,<OtherMetaData>,<...>
h,Col1,Col2,Col3,Col4,Col5,.............,Col100
m,Mandatory,Optional,Optional,...........,Mandatory
d,Val1,Val2,Val3,Val4,Val5,.............,Val100

是否可以在加载文件时跳过指定数量的行并为 DataSet 使用“inferSchema”选项?

Dataset<Row> df = spark.read()
            .format("csv")
            .option("header", "true")
            .option("inferSchema", "true")
            .load("\home\user\data\20170326.csv");

或者我需要定义两个不同的Datasets并使用“except(Dataset other)”来排除需要忽略行的数据集?

【问题讨论】:

【参考方案1】:

您可以尝试将"comment" 选项设置为"m",有效地告诉csv 阅读器跳过以"m" 字符开头的行。

df = spark.read()
          .format("csv")
          .option("header", "true")
          .option("inferSchema", "true")
          .option("comment", "m")
          .load("\home\user\data\20170326.csv")

【讨论】:

以上是关于Apache Spark Dataframe - 从 CSV 文件的第 n 行加载数据的主要内容,如果未能解决你的问题,请参考以下文章

值 createGlobalTempView 不是 apache.org.spark.sql.DataFrame 的成员

在 Apache Spark 中拆分 DataFrame

Spark Rdd DataFrame操作汇总

如何按 Seq[org.apache.spark.sql.Column] 降序排序 spark DataFrame?

如何在 Apache Spark ML API 中从“DataFrame”创建一个“Vector”?

Apache Spark 在 DataFrame 中插入多行