我有一個具有以下架構的 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 推斷自己的資料型別?
uj5u.com熱心網友回復:
Apache Spark 中沒有 varchar,都是字串。是的,這個頁面說有一個,VarcharType但它只適用于模式。
一旦資料在資料框中,事情就變得透明了。保存資料時,所有資料都應該回傳到 Hive 中的 varchar。
您可以在資料框可用時強制讀取資料框(例如 CSV),但我認為它不適用于已經輸入的 Hive。
uj5u.com熱心網友回復:
我打算告訴你只添加一個模式
schema = StructType([StructField('ID', IntegerType(), True),StructField('name', VarcharType(10), True),StructField('reg', VarcharType(8), True)])
df3 = sqlContext.createDataFrame(rdd, schema)
到資料幀,但資料幀在 spark <= 2.4 中沒有 varchar 型別。這可能是您的 varchars 被轉換為 StringType 的原因。這并不是說它們在 spark(2.4 >) 中不可用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/387875.html
