【问题标题】:How to stop Spark from changing varchar to string?如何阻止 Spark 将 varchar 更改为字符串?
【发布时间】:2022-01-19 19:54:03
【问题描述】:

我有一个具有以下架构的 Hive 表:

hive> desc <DB>.<TN>;
id int,
name varchar(10),
reg varchar(8);

当我尝试在 Spark (Pyspark shell) 上描述同一张表时,它会将 Varchar 转换为 String。

spark.sql("""describe <DB>.<TN>""").show()
id int
name string
reg string

我想在 Spark 上查询时保留 Hive 数据类型。意味着我期待 varchar 代替 String。有谁知道如何阻止 spark 推断自己的数据类型?

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    Apache Spark 中没有 varchar,都是字符串。是的,这个page 说有一个VarcharType,但它只用于模式。

    一旦数据在数据框中,一切都是透明的。保存数据时,所有数据都应返回到 Hive 中的 varchar。

    您可以在数据帧可用时强制读取数据帧(例如 CSV),但我认为它不适用于 Hive,因为它已经输入。

    【讨论】:

      【解决方案2】:

      我要告诉你只添加一个架构

      schema = StructType([StructField('ID', IntegerType(), True),StructField('name', VarcharType(10), True),StructField('reg', VarcharType(8), True)])
      df3 = sqlContext.createDataFrame(rdd, schema)
      

      到一个数据帧,但数据帧do not have a varchar type in spark <= 2.4。这可能为什么您的 varchar 被转换为 StringType。这并不是说它们在 spark(2.4 >) 中不可用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-27
        • 2014-09-26
        • 1970-01-01
        • 2010-12-21
        • 2020-11-08
        • 1970-01-01
        相关资源
        最近更新 更多