Spark:自定義Schema信息將數據集合轉換爲Spark sql中的DataFrame

使用場景

在Spark中可以直接讀取數據文件
但是讀取到的數據的每一項數據是沒有數據類型的
而且不能使用數據像使用數據表中的字段名那樣使用數據
可以在讀取數據的時候對讀取到的數據進行設置轉換
設置轉換後使用數據可以像使用數據庫表中的字段那樣
通過字段名獲取數據

代碼實現

import java.util.Properties
import org.apache.spark.sql.types._
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}

/**
  * 演示SparkSQL讀取各種數據源的數據,進行分析
  */
object SchemaTsvSpark {
  def main(args: Array[String]): Unit = {

    val spark = SparkSession
      .builder()
      .appName("SchemaTsvSpark")
      .master("local[2]")
      //設置sparkSQL中shuffle 時分區數
      .config("spark.sql.shuffle.partitions",2)
      .getOrCreate()

    spark.sparkContext.setLogLevel("WARN")
    import spark.implicits._

    //自定義Schema信息
    val schema:StructType = StructType(
      Array(
        StructField("user_id",IntegerType,true),
        StructField("item_id",IntegerType,true),
        StructField("rating",DoubleType,true),
        StructField("timestamp",LongType,true)
      )
    )

    val mlRatingDF: DataFrame = spark.read
      .option("sep","\t")
      .schema(schema)
      .csv("file:///E:/u.data")


    mlRatingDF.printSchema()
    mlRatingDF.show(4,false)
    
    spark.read
      .option("sep",",")
      .option("header","true") //獲取字段的名稱
      .option("inferSchema","true") //自動推斷出各列的數據類型
      .csv("file:///E:/ml-100/u_data.csv")
      .printSchema()
     
    spark.stop()
  }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章