我在存储十进制数据类型时遇到问题,不确定这是错误还是我做错了什么
文件中的数据如下所示
Column1 column2 column3
steve 100 100.23
ronald 500 20.369
maria 600 19.23
当我使用csv阅读器推断火花中的模式时,它将column3的数据类型作为字符串,所以我将其转换为十进制并将其保存为表。
现在,当我访问表格时,它以以下方式显示输出,消除了小数
Column1 column2 column3
steve 100 100
ronald 500 20
maria 600 19
我还在 Hive 中测试了同样的事情,方法是创建一个以 column3 为十进制的本地表,并用数据加载它,同样它没有将它们存储为十进制。
在这方面的任何帮助将不胜感激。
这是上面的代码
在 spark 文件的 schema
root
|-- DEST_AIRPORT_ID: integer (nullable = true)
|-- DEST_AIRPORT_SEQ_ID: integer (nullable = true)
|-- DEST_CITY_MARKET_ID: integer (nullable = true)
|-- DEST string: string (nullable = true)
|-- DEST_CITY_NAME: string (nullable = true)
|-- DEST_STATE_ABR: string (nullable = true)
|-- DEST_STATE_FIPS: integer (nullable = true)
|-- DEST_STATE_NM: string (nullable = true)
|-- DEST_WAC: integer (nullable = true)
|-- DEST_Miles: double (nullable = true)
代码
from pyspark import SparkContext
sc =SparkContext()
from pyspark.sql.types import *
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)
Data=sqlContext.read.format("com.databricks.spark.csv").options(header="true").options(delimiter=",").options(inferSchema="true").load("s3://testbucket/Data_test.csv")
Data1=Data.withColumnRenamed('DEST string','DEST_string')
Data2 =Data1.withColumn('DEST_Miles',Data1.DEST_Miles.cast('Decimal'))
Data2.saveAsTable('Testing_data', mode='overwrite',path='s3://bucketname/Testing_data')
转换为十进制后的架构
root
|-- DEST_AIRPORT_ID: integer (nullable = true)
|-- DEST_AIRPORT_SEQ_ID: integer (nullable = true)
|-- DEST_CITY_MARKET_ID: integer (nullable = true)
|-- DEST string: string (nullable = true)
|-- DEST_CITY_NAME: string (nullable = true)
|-- DEST_STATE_ABR: string (nullable = true)
|-- DEST_STATE_FIPS: integer (nullable = true)
|-- DEST_STATE_NM: string (nullable = true)
|-- DEST_WAC: integer (nullable = true)
|-- DEST_Miles: decimal (nullable = true)
对于蜂巢
create table Destination(
DEST_AIRPORT_ID int,
DEST_AIRPORT_SEQ_ID int,
DEST_CITY_MARKET_ID int,
DEST string,
DEST_CITY_NAME string,
DEST_STATE_ABR string,
DEST_STATE_FIPS string,
DEST_STATE_NM string,
DEST_WAC int,
DEST_Miles Decimal(10,0)
);
INSERT INTO TEST_DATA SELECT * FROM TESTING_data;
如果您还需要更多信息,请告诉我。
谢谢,谢谢