Python 如何将文件保存到带有Spark的拼花地板,以便在读取过程中标题已准备就绪/可用?
我正在使用Spark(“2.4.3”版本)从S3位置(文件夹)读取数据,文件保存为Python 如何将文件保存到带有Spark的拼花地板,以便在读取过程中标题已准备就绪/可用?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我正在使用Spark(“2.4.3”版本)从S3位置(文件夹)读取数据,文件保存为csv.gz 第一行是标题 如果我只是将文件读取为df=spark.read.csv(“s3://myfolder”)并另存为df.write.mode(“overwrite”)。拼花地板(write_folder)->文件作为拼花地板文件写入,但当将其读回某些df时,默认情况下不会识别列(例如df.columns显示\u c0,\u c1…) 将文件保存到拼花地板的正确方法是什么,以便在以后读取拼花地板文件时可以
csv.gz
第一行是标题
如果我只是将文件读取为df=spark.read.csv(“s3://myfolder”)
并另存为df.write.mode(“overwrite”)。拼花地板(write_folder)
->文件作为拼花地板文件写入,但当将其读回某些df时,默认情况下不会识别列(例如df.columns
显示\u c0,\u c1…
)
将文件保存到拼花地板的正确方法是什么,以便在以后读取拼花地板文件时可以准备好列名
如果可能的话,我尽量避免在阅读拼花地板时推断模式(或任何其他体操)。您可以按如下方式更改代码:
df = spark.read.option("header","true").csv("s3://myfolder")
df.write.mode("overwrite").parquet(write_folder)
不获取列名的原因是Spark读取标题行的方式与读取包含数据的其他行的方式相同。
现在,您应该能够在拼花文件中看到您的列名
以下是处理CSV数据时可以使用的一些选项:
读取CSV文件
路径:文件的位置。接受标准Hadoop全局表达式。要读取CSV文件目录,请指定目录。
header:设置为true时,第一行文件名列和不包含在数据中。所有类型都假定为字符串。默认值为false
sep:列分隔符。默认情况下,但可以设置为任何字符
引号:引号字符。默认情况下”,但可以设置为任何字符。引号内的分隔符将被忽略。
转义:转义字符。默认情况下\,但可以设置为任何字符。转义引号字符将被忽略。
parserLib:默认情况下是commons。可以设置为univocity以使用该库进行CSV解析
模式:解析模式。默认情况下,它是允许的。可能的值为:
允许:尝试分析所有行:为缺少的标记插入空值,并忽略额外的标记
DROPMALFORMED:删除标记少于或多于预期的行或与架构不匹配的标记
FAILFAST:如果遇到任何格式错误的行,则使用RuntimeException中止
字符集:字符集。默认情况下为UTF-8,但可以设置为其他有效的字符集名称
推断模式:自动推断列类型。它需要额外传递一次数据,默认为false
注释:跳过以该字符开头的行。默认值为#。通过将其设置为null来禁用注释
空值:表示空值的字符串,与此字符串匹配的任何字段都将在数据帧中设置为空值
日期格式:字符串,指示读取日期或时间戳时要使用的日期格式。自定义日期格式遵循java.text.simpleDataFormat中的格式。这适用于日期类型和时间戳类型。默认情况下,它为null,这意味着尝试通过java.sql.Timestamp.valueOf()解析时间和日期和java.sql.Date.valueOf()
将CSV文件写入存储器:(如果需要)
路径:文件的位置
标题:设置为true时,标题(来自数据帧中的架构)写入第一行
sep:列分隔符。默认情况下,但可以设置为任何字符
引号:引号字符。默认情况下”,但可以设置为任何字符。这是根据quoteMode写的
转义:转义字符。默认情况下\,但可以设置为任何字符。将写入转义引号字符
空值:表示空值的字符串,数据帧中的空值将写入此字符串
日期格式:字符串,指示使用写入日期或时间戳的日期格式。自定义日期格式遵循java.text.simpleDataFormat中的格式。这适用于DateType和TimestampType。如果未指定日期格式,则yyyy-MM-dd HH:MM:ss.S
编解码器:保存时使用的压缩编解码器。应该是实现org.apache.hadoop.io.compress.CompressionCodec的类的完全限定名,或者是一个不区分大小写的短名称(bzip2、gzip、lz4和snappy)。默认为无压缩
quoteMode:何时引用字段(全部、最小值(默认)、非数字、无)写入数据帧时,应添加额外选项,以便同时写入标题:
df.write.option("header", "true").mode("overwrite").parquet(write_folder)
谢谢容易修复:)头与拼花地板?还有拼花地板?