Scala Spark的正确模式(将数据加载到数据帧时)
在表上运行descripe之后,我的红移结构如下(所有字段都可以为空): 所有数据都被提取到S3。现在,我们希望将数据加载到Spark Dataframe中,但也需要为此表创建适当的模式 这些字段的Spark模式是什么样的 这个结构正确吗?(特别想知道数字(11,2)、日期、字符(1)字段) 你应使用:Scala Spark的正确模式(将数据加载到数据帧时),scala,apache-spark,schema,structure,Scala,Apache Spark,Schema,Structure,在表上运行descripe之后,我的红移结构如下(所有字段都可以为空): 所有数据都被提取到S3。现在,我们希望将数据加载到Spark Dataframe中,但也需要为此表创建适当的模式 这些字段的Spark模式是什么样的 这个结构正确吗?(特别想知道数字(11,2)、日期、字符(1)字段) 你应使用: 浮点值的DoubleType或DecimalType(如NUMERIC(11,2))。在我看来,十进制更好,因为它是用大小数运算的 LongType用于非常大的数字-如NUMERIC(18)。
- 浮点值的
或DoubleType
(如DecimalType
)。在我看来,十进制更好,因为它是用大小数运算的NUMERIC(11,2)
用于非常大的数字-如LongType
。否则将无法正确存储NUMERIC(18)
用于日期-可以将其存储为字符串,但如果可以,则应选择更有意义的类型DateType
b
可以有18位数字,所以它应该是LongType
,h
也太大了,但也有小数部分-这就是为什么我推荐DecimalType(或者DoubleType,如果在代码中使用Double,Decimal更安全,因为它可以容纳更大的数字)谢谢。我在尝试DecimalType(所有其他类型都正常)时遇到此错误:84:错误:类型不匹配;找到:org.apache.spark.sql.types.DecimalType.type必需:org.apache.spark.sql.types.DataType结构字段(“aff_num”,DecimalType,true)
a integer
b numeric(18)
c date
d char(3)
e smallint
f char(1)
g varchar(20)
h numeric(11,2)
val schema = StructType(
Array(
StructField("a", IntegerType, true),
StructField("b", IntegerType, true),
StructField("c", StringType, true),
StructField("d", StringType, true),
StructField("e", IntegerType, true),
StructField("f", StringType, true),
StructField("g", StringType, true),
StructField("h", IntegerType, true)
)
)