Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将文件保存到带有Spark的拼花地板,以便在读取过程中标题已准备就绪/可用?_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 如何将文件保存到带有Spark的拼花地板,以便在读取过程中标题已准备就绪/可用?

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…) 将文件保存到拼花地板的正确方法是什么,以便在以后读取拼花地板文件时可以

我正在使用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…

将文件保存到拼花地板的正确方法是什么,以便在以后读取拼花地板文件时可以准备好列名


如果可能的话,我尽量避免在阅读拼花地板时推断模式(或任何其他体操)。

您可以按如下方式更改代码:

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)

谢谢容易修复:)头与拼花地板?还有拼花地板?