Разобрать строку в Scala - PullRequest
0 голосов
/ 17 февраля 2020

Пример строки: "Canada,0,,0,,,1,,,,,\"From: \"\"nitesh\"\" <nitesh@abc.com>\",Sub: RE: X Support Notification - Service Request #<4-20659465477> has been created.,\"To: \"\"'ABC Update'\"\" <support_reply@xyz.com>,; .<sunny@bcd.com>,; .<anchit@xyz.com>; \",,0,0,0,0,0,"

Я должен разобрать строки, подобные этим, в Scala, используя Spark. Я разбивал мои строки в знаке ,, пока я не получил знак , между полями в моих строках, как показано в примере строки.

В настоящее время я использую Scala 2.11 .12 и Spark 2.4.3

Так как я новичок в Scala и программировании в целом, может кто-нибудь, пожалуйста, помогите мне с частью кодирования здесь.

Спасибо в Advance

1 Ответ

0 голосов
/ 17 февраля 2020

Если вы хотите преобразовать свои rdd строк в dataframe, попробуйте ниже, это поможет вам.

val rddStrs= spark.sparkContext.parallelize(List("Canada,0,,0,,,1,,,,,\"From: \"\"nitesh\"\" <nitesh@abc.com>\",Sub: RE: X Support Notification - Service Request #<4-20659465477> has been created.,\"To: \"\"'ABC Update'\"\" <support_reply@xyz.com>,; .<sunny@bcd.com>,; .<anchit@xyz.com>;  \",,0,0,0,0,0,"))

  val colName=List("start","from","subject","to","last")

  val df=spark.createDataFrame(rddStrs.map(temp=>{
    val str=temp.replaceAll(",{2,}", ",").replace("\"","")
    val multipleCommaRemoved=str.replaceAll(",{2,}", ",").replace("\"","")

    val indexOfFrom=multipleCommaRemoved.indexOf("From:")
    val indexOfSub=multipleCommaRemoved.indexOf("Sub:")
    val indexOfTo=multipleCommaRemoved.indexOf("To:")
    val lastIndex=multipleCommaRemoved.lastIndexOf(";")

    val start=multipleCommaRemoved.substring(0,indexOfFrom)
    val from=multipleCommaRemoved.substring(indexOfFrom,indexOfSub)
    val subject=multipleCommaRemoved.substring(indexOfSub,indexOfTo)
    val to=multipleCommaRemoved.substring(indexOfTo,lastIndex)
    val last=multipleCommaRemoved.substring(lastIndex+1).trim()
    (start,from,subject,to,last)
  })).toDF(colName:_*)


  df.show()

//Sample output
+-------------+--------------------+--------------------+--------------------+-----------+
|        start|                from|             subject|                  to|       last|
+-------------+--------------------+--------------------+--------------------+-----------+
|Canada,0,0,1,|From: nitesh <nit...|Sub: RE: X Suppor...|To: 'ABC Update' ...|,0,0,0,0,0,|
+-------------+--------------------+--------------------+--------------------+-----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...