Arrays 将字符串解析为数据帧

Arrays 将字符串解析为数据帧,arrays,scala,dataframe,Arrays,Scala,Dataframe,我有以下数据 100///t1001///t2///t0.119///t2342342342///tHi\nthere!///n103///t1002///t2///t0.119///t2342342342///tHello there! 1010///t10077///t2///t0.119///t2342342342///tHi\nthere!///n1044///t1003///t2///t0.119///t2342342342///tHello there! 在一个文件中,我有多行以上

我有以下数据

100///t1001///t2///t0.119///t2342342342///tHi\nthere!///n103///t1002///t2///t0.119///t2342342342///tHello
there!
1010///t10077///t2///t0.119///t2342342342///tHi\nthere!///n1044///t1003///t2///t0.119///t2342342342///tHello there!
在一个文件中,我有多行以上格式化的数据。每行由
///n
///t
分隔。对于每一行,有四条记录由
///n
分隔。在每个记录中,有四列由
///t
分隔。现在,我需要将其解析为一个数据帧。所以基本上这两条线,;因为每行有2条记录,共6列;数据框中应该有12条记录。每条记录采用相同的格式


我尝试使用split和amp组合来解析它,但没有得到正确的输出

您可以使用字符串转换来处理它,如:

// Sample of input data
val str1 = "100///t1001///t2///t0.119///t2342342342///tHi\nthere!///n103///t1002///t2///t0.119///t2342342342///tHello there!"
val str2 = "1010///t10077///t2///t0.119///t2342342342///tHi\nthere!///n1044///t1003///t2///t0.119///t2342342342///tHello there!"

val df = Seq(str1, str2).toDF

// Process:
    val output = df.as[String].flatMap(row=>{
  val fields = row.split("///n").map(record=>{
    val fields = record.split("///t").toList
    (fields(0), fields(1), fields(2), fields(3), fields(4), fields(5))
  }).toList
  fields
}).toDF("column_1", "column_2", "column_3", "column_4", "column_5", "column_6")
结果:

+--------+--------+--------+--------+----------+------------+
|column_1|column_2|column_3|column_4|  column_5|    column_6|
+--------+--------+--------+--------+----------+------------+
|     100|    1001|       2|   0.119|2342342342|   Hi       |
|                                              |there!      |
|     103|    1002|       2|   0.119|2342342342|Hello there!|
|    1010|   10077|       2|   0.119|2342342342|   Hi       |
|                                              |      there!|
|    1044|    1003|       2|   0.119|2342342342|Hello there!|
+--------+--------+--------+--------+----------+------------+