指定 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