Scala 使用空间分割文件,其中列数据也有空间

Scala 使用空间分割文件,其中列数据也有空间,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,您好,我有一个数据文件,它以空格作为分隔符,并且每列的数据也包含空格。如何使用spark程序使用scala拆分它: 样本数据文件: student.txt 3列: 名称 地址 身份证 输出数据帧应为: |Name |City |State |Id--| +-------------+------+-----------+-----+ | Abhi Rishii|Bangalore|Karnataka|1234| | Rinki siyty|Hydraba

您好,我有一个数据文件,它以空格作为分隔符,并且每列的数据也包含空格。如何使用spark程序使用scala拆分它: 样本数据文件: student.txt

3列: 名称 地址 身份证

输出数据帧应为:

 |Name         |City   |State     |Id--|
  +-------------+------+-----------+-----+
  | Abhi Rishii|Bangalore|Karnataka|1234|
  | Rinki siyty|Hydrabad |Andra    |2345|
  +----+-----+-----------+---------+-----+

您的文件是以制表符分隔的文件。
您可以使用Spark的csv阅读器将此文件直接读取到数据帧中

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder().getOrCreate()
var studentDf = spark.read.format("csv")     // Use "csv" for both TSV and CSV
                .option("header", "true")  
                .option("delimiter", "\t") // Set delimiter to tab .
                .load("student.txt")
                .withColumn("_tmp", split($"Address", "\\,"))
                .withColumn($"_tmp".getItem(0).as("City"))
                .withColumn($"_tmp".getItem(1).as("State"))
                .drop("_tmp")
                .drop("Address")


studentDf .show()

  |Name         |City   |State     |Id--|
  +-------------+------+-----------+-----+
  | Abhi Rishii|Bangalore|Karnataka|1234|
  | Rinki siyty|Hydrabad |Andra    |2345|
  +----+-----+-----------+---------+-----+

数据可以在引号内吗?然后你就可以读了。输入文件的来源是什么?数据不是按空格划分的,而是按制表符(\t)划分的。但是:地址列在传入的输入文件中有两个字段,分别为CityName和State。那么,我将如何拆分此地址列,以便在生成的数据框中,我可以将city和State作为两个单独的列谢谢你:-)你节省了我的时间:-@remis haroon
import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder().getOrCreate()
var studentDf = spark.read.format("csv")     // Use "csv" for both TSV and CSV
                .option("header", "true")  
                .option("delimiter", "\t") // Set delimiter to tab .
                .load("student.txt")
                .withColumn("_tmp", split($"Address", "\\,"))
                .withColumn($"_tmp".getItem(0).as("City"))
                .withColumn($"_tmp".getItem(1).as("State"))
                .drop("_tmp")
                .drop("Address")


studentDf .show()

  |Name         |City   |State     |Id--|
  +-------------+------+-----------+-----+
  | Abhi Rishii|Bangalore|Karnataka|1234|
  | Rinki siyty|Hydrabad |Andra    |2345|
  +----+-----+-----------+---------+-----+