1、从csv中读取文件,改文件没有表头
import org.apache.spark.sql.types.{DataTypes, StructType}
import org.apache.spark.sql.{DataFrame, SparkSession}
object CreateDataFrameFromCSV {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession.builder().appName(this.getClass.getSimpleName).master("local[*]").getOrCreate()
// 方式1、 从csv中读取数据,但是该数据是没有表头的
// val df: DataFrame = spark.read.csv("data/stu.txt")
// +---+---+---+---+----+
//|_c0|_c1|_c2|_c3| _c4|
//+---+---+---+---+----+
//| 1| 张飞| 21| 北京|80.0|
//| 2| 关羽| 23| 北京|82.0|
//| 3| 赵云| 20| 北京|88.6|
//| 4| 刘备| 26| 北京|83.0|
//| 5| 曹操| 30| 北京|90.0|
//+---+---+---+---+----+
// df.show()
// 方式2:csv文件(不带header)自定义schema进行创建
val schema: StructType = new StructType()
.add("id", DataTypes.IntegerType)
.add("name", DataTypes.StringType)
.add("age", DataTypes.IntegerType)
.add("city", DataTypes.StringType)
.add("score", DataTypes.DoubleType)
val df: DataFrame = spark.read.schema(schema).csv("data/stu.txt")
df.printSchema()
df.show()
spark.close()
}
}
2、读取csv文件,改文件带表头
import org.apache.spark.sql.{DataFrame, SparkSession}
object CreatDataFrameFromCSVWithHeader {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession.builder().appName(this.getClass.getSimpleName).master("local[*]").getOrCreate()
//读取表头数据成功,但是类型都是String
// root
// |-- id: string (nullable = true)
// |-- name: string (nullable = true)
// |-- age: string (nullable = true)
// |-- city: string (nullable = true)
// |-- score: string (nullable = true)
val df: DataFrame = spark.read.option("header",true).csv("data/stu2.txt")
df.printSchema()
df.show()
// 可以开启 inferSchema = true让框架来对csv中的数据字段进行合理的类型推断. 如果退佃不对,可以自定义Schema
val df2 = spark.read.option("header",true).option("inferSchema",true).csv("data/stu2.txt")
df2.printSchema()
df2.show()
// 数据已parquet格式写出
df2.write.parquet("/data/output")
spark.close()
}
}
2、读取parquet文件
spark.read.parquet("data/output")
3、从jdbc中读取数据
import java.util.Properties
import org.apache.spark.sql.{DataFrame, SparkSession}
object CreateDataFrameFromJDBC {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession.builder().appName(this.getClass.getSimpleName).master("local[*]").getOrCreate()
val props = new Properties()
props.setProperty("user","root")
props.setProperty("password","root")
val df: DataFrame = spark.read.jdbc("jdbc:mysql://127.0.0.1:3306/test","company_info",props)
df.show()
spark.close()
}
}
4、从Hive中读取数据
在pom.xml文件中添加
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>2.4.4</version>
</dependency>
import org.apache.spark.sql.{DataFrame, SparkSession}
object CreateDataFrameFromHive {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder().appName(this.getClass.getSimpleName).master("local[*]")
// 启用hive支持,需要调用enableHiveSupport。还需要添加一个依赖 spark-hive
// 默认sparksql内置了自己的hive
// 如果程序能从classpath中加载到hive-site.xml配置文件,那么它访问的hive源数据库就不是内置的了,而是指定的元数据库了
// 如果程序能从classpath中加载到core-site.xml hdfs-site.xml配置文件,那么访问的就不是本地文件系统了,而是配置中指定的hdfs系统了
.enableHiveSupport()
.getOrCreate()
val df: DataFrame = spark.sql("select id,phone from dwt.abc limit 10")
df.show()
spark.close()
}
}