代码之家  ›  专栏  ›  技术社区  ›  user2531569

如何阻止Spark将varchar更改为string

  •  0
  • user2531569  · 技术社区  · 4 年前

    我有一个配置单元表,其架构如下:

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

    当我试图在Spark(Pysparkshell)上描述同一个表时,它正在将Varchar转换为String。

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

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

    0 回复  |  直到 4 年前
        1
  •  3
  •   jgp    4 年前

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

    一旦数据在数据帧中,一切都是透明的。保存数据时,所有数据都应返回到配置单元中的varchar。

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

        2
  •  0
  •   Matt Andruff    4 年前

    我本来打算告诉你添加一个模式

    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 。哪个是 可能的 为什么您的varchars被转换为StringType。这并不是说它们在spark(2.4>)中不可用。

    推荐文章