如何从 dat 文件中跳过第一行和最后一行,并使用 databricks 中的 scala 使其成为数据框

How to skip first and last line from a dat file and make it to dataframe using scala in databricks

H|*|D|*|PA|*|BJ|*|S|*|2019.05.27 08:54:24|##|
H|*|AP_ATTR_ID|*|AP_ID|*|OPER_ID|*|ATTR_ID|*|ATTR_GROUP|*|LST_UPD_USR|*|LST_UPD_TSTMP|##|
779045|*|Sar|*|SUPERVISOR HIERARCHY|*|Supervisor|*|2|*|128|*|2019.05.14 16:48:16|##|
779048|*|KK|*|SUPERVISOR HIERARCHY|*|Supervisor|*|2|*|116|*|2019.05.14 16:59:02|##|
779054|*|Nisha - A|*|EXACT|*|CustomColumnRow120|*|2|*|1165|*|2019.05.15 12:11:48|##|
T|*||*|2019.05.27 08:54:28|##|

文件名为 PA.dat.

我需要跳过第一行,文件的 file.second 行的最后一行也是列名。 现在我需要使用 columnanme 制作一个数据框并使用 scala 跳过这两行。

N.B - 需要从第二行跳过 'H',因为它不是列名的一部分。

请帮我解决这个问题。

类似的东西。我不知道 sql.functions 是否可以将数组拆分成列,所以我使用 rdd 做到了。

import java.util.regex.Pattern
import org.apache.spark.sql.RowFactory
import org.apache.spark.sql.types.{StringType, StructField, StructType}
import org.apache.spark.sql.functions._ 

val data = spark.read
  .text("data/PA.dat")
  .toDF("val")
  .withColumn("id", monotonically_increasing_id())

val count = data.count()
val header = data.where('id === 1).collect().map(s => s.getString(0)).apply(0)
val columns = header
  .replace("H|*|", "")
  .replace("|##|", "")
  .replace("|*|", ",")
  .split(",")
val columnDelimiter = Pattern.quote("|*|")
val correctData = data.where('id > 1 && 'id < count - 1)
  .select(regexp_replace('val, columnDelimiter, ",").as("val"))
val splitIntoCols = correctData.rdd.map(s=>{
  val arr = s.getString(0).split(",")
  RowFactory.create(arr:_*)
})
val struct = StructType(columns.map(s=>StructField(s, StringType, true)))
val finalDF = spark.createDataFrame(splitIntoCols,struct)

finalDF.show()


+----------+---------+--------------------+------------------+----------+-----------+--------------------+
|AP_ATTR_ID|    AP_ID|             OPER_ID|           ATTR_ID|ATTR_GROUP|LST_UPD_USR|       LST_UPD_TSTMP|
+----------+---------+--------------------+------------------+----------+-----------+--------------------+
|    779045|      Sar|SUPERVISOR HIERARCHY|        Supervisor|         2|        128|2019.05.14 16:48:...|
|    779048|       KK|SUPERVISOR HIERARCHY|        Supervisor|         2|        116|2019.05.14 16:59:...|
|    779054|Nisha - A|               EXACT|CustomColumnRow120|         2|       1165|2019.05.15 12:11:...|
+----------+---------+--------------------+------------------+----------+-----------+--------------------+