【发布时间】:2020-12-15 22:42:39
【问题描述】:
我想读取和写入一个 csv 文件,忽略第一行,因为标题从第二行开始。
val df =df1.withColumn("index", monotonicallyIncreasingId()).filter(col("index") > 1).drop("index")
这并不能解决我的问题。
【问题讨论】:
标签: scala dataframe apache-spark databricks
我想读取和写入一个 csv 文件,忽略第一行,因为标题从第二行开始。
val df =df1.withColumn("index", monotonicallyIncreasingId()).filter(col("index") > 1).drop("index")
这并不能解决我的问题。
【问题讨论】:
标签: scala dataframe apache-spark databricks
左反加入可能吗?
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()
【讨论】:
让我告诉你我的尝试。 如果 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 |
+----+---+---+
【讨论】: