spark.read.excel - 使用自定义架构时不读取所有 Excel 行
Posted
技术标签:
【中文标题】spark.read.excel - 使用自定义架构时不读取所有 Excel 行【英文标题】:spark.read.excel - Not reading all Excel rows when using custom schema 【发布时间】:2021-12-31 08:27:42 【问题描述】:我正在尝试从“excel”文件中读取 Spark DataFrame。我使用了 crealytics 依赖项。
在没有任何预定义架构的情况下,所有行都可以正确读取,但仅作为字符串类型的列。
为了防止这种情况,我使用了我自己的架构(我提到某些列是整数类型),但在这种情况下,当读取文件时,大部分 行都会被删除。
build.sbt 中使用的库依赖:
"com.crealytics" %% "spark-excel" % "0.11.1",
Scala version - 2.11.8
Spark version - 2.3.2
val inputDF = sparkSession.read.excel(useHeader = true).load(inputLocation(0))
上面读取所有数据 - 大约 25000 行。
但是,
val inputWithSchemaDF: DataFrame = sparkSession.read
.format("com.crealytics.spark.excel")
.option("useHeader" , "false")
.option("inferSchema", "false")
.option("addColorColumns", "true")
.option("treatEmptyValuesAsNulls" , "false")
.option("keepUndefinedRows", "true")
.option("maxRowsInMey", 2000)
.schema(templateSchema)
.load(inputLocation)
这给了我 450 行。 有没有办法防止这种情况?提前致谢! (已编辑)
【问题讨论】:
【参考方案1】:到目前为止,我还没有找到解决此问题的方法,但我尝试通过手动类型转换以不同的方式解决它。为了使它在代码行数方面更好一些,我借助了 for 循环。我的解决方案如下:
第 1 步:创建我自己的“StructType”类型架构:
val requiredSchema = new StructType()
.add("ID", IntegerType, true)
.add("Vendor", StringType, true)
.add("Brand", StringType, true)
.add("Product Name", StringType, true)
.add("Net Quantity", StringType, true)
第 2 步:在读取数据帧后输入类型转换(不使用自定义架构)从 excel 文件(读取数据时不使用架构) :
def convertInputToDesiredSchema(inputDF: DataFrame, requiredSchema: StructType)(implicit sparkSession: SparkSession) : DataFrame =
var schemaDf: DataFrame = inputDF
for(i <- inputDF.columns.indices)
if(inputDF.schema(i).dataType.typeName != requiredSchema(i).dataType.typeName)
schemaDf = schemaDf.withColumn(schemaDf.columns(i), col(schemaDf.columns(i)).cast(requiredSchema.apply(i).dataType))
schemaDf
这可能不是一个有效的解决方案,但比输入太多代码行来对多列进行类型转换要好。
我仍在寻找原始问题的解决方案。
此解决方案是为了以防万一有人想尝试并立即需要快速修复。
【讨论】:
【参考方案2】:我在使用 PySpark 和 com.crealytics 时遇到了同样的问题。 inferSchema = 'false' 将我的所有数据读取为 stringType。指定架构或 .option(enforceSchema ='true') 会删除我的所有数据。还没有解决方案。不确定这是否是已知错误。
【讨论】:
以上是关于spark.read.excel - 使用自定义架构时不读取所有 Excel 行的主要内容,如果未能解决你的问题,请参考以下文章
Firefox 和 Chrome 下架流行扩展 Stylish
matlab/simulink可变阻尼座椅悬架振动自适应控制设计与分析
matlab/simulink可变阻尼座椅悬架振动自适应控制设计与分析
SpringBoot Security 整合thymeleaf模板自定义登录页面,按需提示错误信息