指定 Spark Schema 不会显示正确的显示结果
Specifying Spark Schema won't show correct display results
我正在为我的 spark 代码指定模式,但结果都是 return NULL。但是,当我 inferSchema=True, header=True 时,我得到了正确的结果。
例如我的模式如下:
myschema = StructType([StructField("event_ts", IntegerType(), True)
,StructField("sdk_ts", IntegerType(), True)
,StructField("device_id", StringType(), True)
,StructField("latitude", DoubleType(), True)
,StructField("longitude", DoubleType(), True)
,StructField("country", StringType(), True)])
当我应用架构将文件作为数据帧读入时,如下所示:
testzip = spark.read.csv("adl://mylake.azuredatalakestore.net/filepath/01/000000000000.csv.gz",schema=myschema)
我得到以下结果都显示 NULL
但是,当我使用 inferSchema=True、header=True 如下读取数据时,我得到了正确的结果,即没有 NULL
testzip = spark.read.csv("adl://mylake.azuredatalakestore.net/filepath/01/000000000000.csv.gz",inferSchema=True,header=True)
我确定我遗漏了一些非常明显的东西,但就是看不到它。
记录与架构不匹配。这里的默认操作是 spark 将结果输出到名为 _corrupt_record 的列(默认模式称为 Permissive),如果您将其添加到 select 中,您将看到数据。
为了解决这个问题,我会将架构中的每个数据类型更改为 StringType()。它现在应该给你结果。然后一次将它们改回一个,以确定哪个转换失败。这可能是双重类型。也许导入为字符串然后转换。
这里有更多关于宽容模式的信息。 https://spark.apache.org/docs/2.0.2/api/java/org/apache/spark/sql/DataFrameReader.html
我正在为我的 spark 代码指定模式,但结果都是 return NULL。但是,当我 inferSchema=True, header=True 时,我得到了正确的结果。
例如我的模式如下:
myschema = StructType([StructField("event_ts", IntegerType(), True)
,StructField("sdk_ts", IntegerType(), True)
,StructField("device_id", StringType(), True)
,StructField("latitude", DoubleType(), True)
,StructField("longitude", DoubleType(), True)
,StructField("country", StringType(), True)])
当我应用架构将文件作为数据帧读入时,如下所示:
testzip = spark.read.csv("adl://mylake.azuredatalakestore.net/filepath/01/000000000000.csv.gz",schema=myschema)
我得到以下结果都显示 NULL
但是,当我使用 inferSchema=True、header=True 如下读取数据时,我得到了正确的结果,即没有 NULL
testzip = spark.read.csv("adl://mylake.azuredatalakestore.net/filepath/01/000000000000.csv.gz",inferSchema=True,header=True)
我确定我遗漏了一些非常明显的东西,但就是看不到它。
记录与架构不匹配。这里的默认操作是 spark 将结果输出到名为 _corrupt_record 的列(默认模式称为 Permissive),如果您将其添加到 select 中,您将看到数据。
为了解决这个问题,我会将架构中的每个数据类型更改为 StringType()。它现在应该给你结果。然后一次将它们改回一个,以确定哪个转换失败。这可能是双重类型。也许导入为字符串然后转换。
这里有更多关于宽容模式的信息。 https://spark.apache.org/docs/2.0.2/api/java/org/apache/spark/sql/DataFrameReader.html