为避免手动文件错误,如何在spark / scala中对列的动态数据类型进行编码

时间:2018-12-19 05:51:41

标签: apache-spark

我们得到了很多手册文件,在处理数据框之前,我们需要验证一些数据类型。有人可以建议我如何继续执行此要求。基本上需要编写一个spark通用/通用程序,该程序应该适用于许多文件。如果可能的话,请发送有关此电子邮件ID的更多详细信息以及pathirammi1@gmail.com。

1 个答案:

答案 0 :(得分:0)

想知道您的文件是否包含分隔符分隔的记录(例如csv文件)。如果是,则可以很好地将其读取为文本文件,并根据记录分割和定界符并对其进行处理。

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession

object RDDFromCSVFile {

  def main(args:Array[String]): Unit ={

    def splitString(row:String):Array[String]={
      row.split(",")
    }

    val spark:SparkSession = SparkSession.builder()
      .master("local[1]")
      .appName("SparkByExample")
      .getOrCreate()
    val sc = spark.sparkContext

    val rdd = sc.textFile("randomfile.csv")

    val rdd2:RDD = rdd.map(row=>{
     val strArray = splitString(row)
      val field1 = strArray(0)
      val field2 = strArray(1)
      val field3 = strArray(3)
      val field4 = strArray(4)
      // DO custom code here and return to create RDD
    })

    rdd2.foreach(a=>println(a.toString))
  }

}

如果您有非结构化数据,则应使用以下代码

import org.apache.spark.sql.SparkSession

object RDDFromWholeTextFile {

  def main(args:Array[String]): Unit = {

    val spark:SparkSession = SparkSession.builder()
      .master("local[1]")
      .appName("SparkByExample")
      .getOrCreate()
    val sc = spark.sparkContext

    val rdd = sc.wholeTextFiles("alice.txt")
    rdd.foreach(a=>println(a._1+"---->"+a._2))

  }
}

希望这会有所帮助! 谢谢, Naveen