直接读取
ss = SparkSession \
.builder \
.appName("luodj_db_access") \
.getOrCreate()
# 列名是_c开头的,例如_c0, _c1,且header也当做一行
df = ss.read.csv('./mdd_sample.csv')
读取本地文件,列名是_c开头的自动列名。
但是对应的schema全是string
使用自定义结构体读取
如果想要一开始就转换成自己想要的格式,可以使用schema来指定自定义的structtype,
# 支持格式
from pyspark.sql.types import StructField, StructType, DateType, StringType, DecimalType, IntegerType, DoubleType
schema1 = StructType([
StructField('pub_dt', StringType(), False),
StructField('sec_id', StringType(), False),
StructField('f0010', StringType(), True),
StructField('f0020', StringType(), True),
StructField('f0030', StringType(), True),
StructField('f0040', StringType(), True),
StructField('f0050', StringType(), True),
StructField('f1010', StringType(), True),
StructField('f1020', StringType(), True),
StructField('f1030', StringType(), True),
StructField('f1040', StringType(), True),
StructField('f1050', StringType(), True),
StructField('f3010', StringType(), True),
StructField('f3020', StringType(), True),
StructField('f3030', DateType(), True),
StructField('f3040', DoubleType(), True),
StructField('f3050', IntegerType(), True),
StructField('rnk', IntegerType(), True),
])
df = ss.read.csv('./mdd2.csv',
header=True,
enforceSchema=True,
sep=',',
mode='FAILFAST',
dateFormat='yyyy/MM/dd',
schema=schema1)
enforceSchema
建议设置,防止使用了使用了自定带格式导致不一样的错误- schema指定自己structtype,也可以ddl格式,例如"pub_dt Date, sec_id String"
- mode 主要有三个值,分别是
PERMISSIVE
(遇到解析不了,使用系统自带转换,实在不行就转换成null)、DROPMALFORMED
(遇到解析不了,就放弃该记录)和FAILFAST
(遇到解析不了,就报错,终止代码执行) header
是否设置对应忽略第一行,如果第一行是列头,可以这是true来过滤