sparksql有统一的外部数据读取api
sparksession.read.format("text|scv|json|parquer|orc|avro|jdbc|....")
.options("K", "V")
.schema(StructType | String) #String语法如下:schema("name STRING, age INT")
.load("要读取的文件路径,支持本地和hdfs")
- text格式的,将文件一行读取为一列,默认列名是value, 类型是string,设置列名可以通过StructType定义schema来设置
schema = StructType().add("列名", StringType(), nullable=False)
- json格式的,一版不用设置schema,如果读取格式与我们预想的不一致,则需要人为指定schema
- 读取csv数据源
df = spark.read.format("csv").\
.option("sep", ",").\ # 指定分隔符
.option("header", True).\ # 指定第一行不要,作为头
.option("name STRING, age INT, job STRING").\ #指定类型,不写会默认全字符串类型
.load("myfile.csv")
- 读取parquet数据源,直接load即可
parquet是spark中常用的一种列式存储数据格式,和Hive中的ORC差不多,parquet内置schema,存储以列作为存储格式,是序列化存储在文件中的,不能直接查看