pyspark如何检查给定的spark数据帧是不是已使用inferSchema = True创建
Posted
技术标签:
【中文标题】pyspark如何检查给定的spark数据帧是不是已使用inferSchema = True创建【英文标题】:pyspark how to check if given spark dataframe has created with inferSchema=Truepyspark如何检查给定的spark数据帧是否已使用inferSchema = True创建 【发布时间】:2021-04-28 12:11:38 【问题描述】:我正在开发一个 API,其中一个函数应该接收一个 spark 数据帧,并使用 spark 数据帧中的架构来执行操作。
由于无法保证用户会创建数据框并将推断架构设置为 True,因此我的函数将收到一个没有推断架构的数据框,因此如果发生这种情况,我想抛出一个错误。
是否可以检查是否已使用 inferSchema=True 创建了数据框? 或者是否有一个 pyspark 函数可以在创建数据框后推断架构?
由于 inferSchema=False 所有列都是 StringType,我不能基于此拒绝数据帧,因为这是某些数据帧的可能架构。
【问题讨论】:
【参考方案1】:不,它不是这样工作的。 Spark 数据框总是有一个模式,无论模式是来自“推断”还是通过定义。 “怀疑”数据框具有inferSchema=False
的唯一方法是——就像你说的——所有列都是StringType
。所以这里的一个选项是你的 API 可以抛出警告而不是错误,如果你看到所有列都是字符串
【讨论】:
谢谢,想知道为什么这不只是作为标志保存在 sparks 数据框对象中。【参考方案2】:当 inferSchema 设置为 false 时,Spark 将读取 所有具有 String Data 类型的列。 例如,它还将 ISO 格式的日期列读取为字符串。 但如果将其设置为 true,Spark 就会足够聪明地确定正确的数据类型。
所以尝试通过 dataFrame.printSchema()
检查数据帧并检查上述条件是否成立。
【讨论】:
以上是关于pyspark如何检查给定的spark数据帧是不是已使用inferSchema = True创建的主要内容,如果未能解决你的问题,请参考以下文章
pyspark:如何获取 spark 数据帧的 Spark SQLContext?
如何从 BigQuery 读取分区表到 Spark 数据帧(在 PySpark 中)
PySpark:如何将具有 SparseVector 类型的列的 Spark 数据帧写入 CSV 文件?
如何使用 spark.read.jdbc 读取不同 Pyspark 数据帧中的多个文件