Convierte archivos a DF

1. RDD coopera con la clase de caso para convertir DF

Definir la clase de muestra

scala> case class Person (ID: Int, Name: String, Age: Int)
clase definida Person

Definir RDD

scala> val lineRDD = sc.textFile (“archivo: ///export/person.txt”) .map (_. split (""))
lineRDD: org.apache.spark.rdd.RDD [Array [String]] = MapPartitionsRDD [5] en el mapa en: 24

Asociar RDD con la clase de caso

scala> val PersonRDD = lineRDD.map (x => Person (x (0) .toInt, x (1), x (2) .toInt))
PersonRDD: org.apache.spark.rdd.RDD [Person] = MapPartitionsRDD [7] en el mapa en: 28

Convierta RDD a DF

scala> val PersonDF = PersonRDD.toDF
PersonDF: org.apache.spark.sql.DataFrame = [ID: int, Nombre: cadena… 1 campo más]

Mostrar DF

scala> PersonDF.show
± - ± ------- ± - +
| ID | Nombre | Edad |
± - ± ------- ± - +
| 1 | zhangsan | 20 |
| 2 | lisi | 29 |
| 3 | wangwu | 25 |
| 4 | zhaoliu | 30 |
| 5 | tianqi | 35 |
| 6 | kobe | 40 |
± - ± ------- ± - +

2. Lea el archivo json para crear un DataFrame

Spark analiza los datos json para crear DF

val jsonDF = spark.read.json ("archivo: ///export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/src/main/resources/people.json")

3. Lea el archivo de formato de almacenamiento en columnas de parquet para crear un DataFrame

park analiza directamente los datos en formato parquet para crear DF

val parquetDF = spark.read.parquet (“archivo: ///export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/src/main/resources/users.parquet”)

JavaAPI implementa lo anterior

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

case class person(id: Int, name: String, age: Int)

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

    val sparkSession = SparkSession.builder().appName("sprkSQL").master("local[2]").getOrCreate()
    val sparkContext: RDD[String] = sparkSession.sparkContext.textFile("file:///C:\\Users\\Administrator\\Documents\\tt")
    val map: RDD[Array[String]] = sparkContext.map(_.split(" "))
    val personRDD: RDD[person] = map.map(x => person(x(0).toInt, x(1), x(2).toInt))
    sparkSession.sparkContext.setLogLevel("WARN")
    //todo  使用toDF方法需要导包
    import sparkSession.implicits._
    val personDF = personRDD.toDF()
    //todo  ********************************DSL语法*******************************
    println(personDF.show())
    println(personDF.select($"name", $"age" + 1).show())
    personDF.printSchema()
    println(personDF.groupBy("age").count())
    //todo  ********************************SQL语法*******************************
    //todo  将dataFrame注册成表
    personDF.registerTempTable("person")
    personDF.createTempView("person2")
    personDF.createOrReplaceTempView("person3")
    sparkSession.sql("select * from person")
    sparkSession.close()
    sparkSession.sparkContext.stop()
  }
}

Realice la creación de df a través del objeto de fila y structType

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructType}
import org.apache.spark.sql.{Row, SparkSession}

object sparkDF2 {
  def main(args: Array[String]): Unit = {
    val sparkSession = SparkSession.builder().master("local[2]").appName("sparkDF").getOrCreate()
    val sparkContext = sparkSession.sparkContext
    val file: RDD[String] = sparkContext.textFile("file:///C:\\Users\\Administrator\\Documents\\tt")
    sparkContext.setLogLevel("WARN")
    val arrayFile = file.map(_.split(" "))
    val row: RDD[Row] = arrayFile.map(x => Row(x(0).toInt,x(1),x(2).toInt))
    val structType = new StructType().add("id",IntegerType).add("name",StringType).add("age",IntegerType)
    val dataFrame = sparkSession.createDataFrame(row,structType)

    dataFrame.show()
    sparkContext.stop()
    sparkSession.close()
  }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44429965/article/details/107397443
Recomendado
Clasificación