use*_*124 11 csv schema header apache-spark apache-spark-sql
pyspark参考:spark.read.format("csv") 与 spark.read.csv 的性能差异
我以为我需要.options("inferSchema" , "true")
并.option("header", "true")
打印我的标题,但显然我仍然可以用标题打印我的 csv。
标头和架构有什么区别?我不太明白“inferSchema:自动推断列类型。它需要额外传递一次数据,默认情况下为 false”的含义。
Sha*_*ica 28
标头和架构是分开的东西。
标题:
如果 csv 文件有标题(第一行中的列名),则设置header=true
. 这将使用 csv 文件中的第一行作为数据框的列名。设置header=false
(默认选项)将导致使用默认列名的数据帧:_c0
,_c1
,_c2
等。
将此设置为 true 或 false 应基于您的输入文件。
架构:
此处引用的架构是列类型。一列可以是 String、Double、Long 等类型。使用inferSchema=false
(默认选项)将提供一个数据框,其中所有列都是字符串 ( StringType
)。根据您想要做什么,字符串可能不起作用。例如,如果您想从不同的列添加数字,那么这些列应该是某种数字类型(字符串不起作用)。
通过设置inferSchema=true
,Spark 将自动遍历 csv 文件并推断每列的架构。这需要对文件进行额外的传递,这将导致读取inferSchema
设置为 true的文件变慢。但是作为回报,数据帧很可能在给定其输入的情况下具有正确的模式。
作为读取 csv 的替代方法,inferSchema
您可以在阅读时提供模式。这具有比推断模式更快的优点,同时提供具有正确列类型的数据帧。此外,对于没有标题行的 csv 文件,可以自动给出列名。要提供架构,请参阅例如:在将 csv 文件作为数据帧读取时提供架构
我们可以通过两种方式在读取 csv 文件时指定模式。
方式一:指定inferSchema=true和header=true。
val myDataFrame = spark.read.options(Map("inferSchema"->"true", "header"->"true")).csv("/path/csv_filename.csv")
Run Code Online (Sandbox Code Playgroud)
注意:在读取数据时使用这种方法,它将创建一个额外的阶段。
方式2:明确指定模式。
val schema = new StructType()
.add("Id",IntegerType,true)
.add("Name",StringType,true)
.add("Age",IntegerType,true)
val myDataFrame = spark.read.option("header", "true")
.schema(schema)
.csv("/path/csv_filename.csv")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25379 次 |
最近记录: |