【问题标题】:how to read a leading zero number to dataframe in pyspark如何在pyspark中将前导零数读取到数据帧
【发布时间】:2022-01-03 18:03:12
【问题描述】:

我正在读取一个具有前导零值的 xml(我没有添加任何架构,因为我不确定数据的架构)。但是当我使用 databricks spark xml lib 阅读时,我看到该数字正在读取为 long 数据类型,并且不再添加前导零..

有什么方法可以读取前导零数字吗?

例如: 001234

我得到的结果是 号码

1234

预期结果是: 号码

001234 该值不是固定长度。

【问题讨论】:

  • 数字不以0开头。如果要保留前导0,则需要将值设为字符串。
  • 是的,我的错...预期结果应该是字符串形式的 001234

标签: dataframe pyspark databricks


【解决方案1】:

当您在未定义架构的情况下加载时,spark 将尝试“猜测”数据类型。这被称为推断模式。为避免这种情况,您需要“告诉” Spark 您正在加载的数据类型,在本例中为 String 类型。比如:

my_schema = StructType([
    StructField("column1", StringType()),
    StructField("column2", DateType()),
    StructField("column3", IntegerType())
])

df = sqlContext.read \
  .format("com.databricks.spark.xml")\
  .schema(my_schema)\
  .load("your_file.xml")

【讨论】:

  • 我也使用过相同的,但我在下一个 xml 文件中有未知字段,需要阅读它们。如果我定义架构,我无法覆盖这些字段。有什么办法吗在阅读时转换单个字段
  • 使用.options("inferSchema" , "false"),所有列都将作为字符串类型
  • option("inferSchema", False) 在阅读 df 时添加了这个,仍然没有运气
  • 我的错,我用选项代替了选项
  • 太好了,如果您标记为已回答,不胜感激
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多