【问题标题】:Skip first line of a csv file in scala在scala中跳过csv文件的第一行
【发布时间】:2020-12-15 22:42:39
【问题描述】:

我想读取和写入一个 csv 文件,忽略第一行,因为标题从第二行开始。

val df =df1.withColumn("index", monotonicallyIncreasingId()).filter(col("index") > 1).drop("index")

这并不能解决我的问题。

【问题讨论】:

标签: scala dataframe apache-spark databricks


【解决方案1】:

左反加入可能吗?

header = df.limit(1)
df.join(header, df.columns, 'left_anti').show()

或使用 rdd 过滤器。

header = df.first()
df.rdd.filter(lambda x: x != header).toDF(df.columns).show()

【讨论】:

    【解决方案2】:

    让我告诉你我的尝试。 如果 csv 文件的第二行中存在标题,我们需要忽略第一行。

    val df=spark.read.text("/yourFilePath/my.csv").withColumn("row_id",monotonically_increasing_id)
    val cols=df.select("value").filter('row_id===1).first.mkString.split(",")  
    val df2 = df.filter('row_id>1).
                 withColumn("temp", split(col("value"), ",")).
                 select((0 until cols.length).map(i => col("temp").getItem(i).as(cols.apply(i))): _*)
    

    之前

    +------------+------+
    |       value|row_id|
    +------------+------+
    |    aasadasd|     0|
    |name,age,des|     1|
    |      a,2,dd|     2|
    |      b,5,ff|     3|
    +------------+------+
    

    之后

    +----+---+---+
    |name|age|des|
    +----+---+---+
    |a   |2  |dd |
    |b   |5  |ff |
    +----+---+---+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-12
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 2021-11-11
      • 2014-01-26
      相关资源
      最近更新 更多