Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark的正确模式(将数据加载到数据帧时)_Scala_Apache Spark_Schema_Structure - Fatal编程技术网

Scala Spark的正确模式(将数据加载到数据帧时)

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)。

在表上运行descripe之后,我的红移结构如下(所有字段都可以为空):

所有数据都被提取到S3。现在,我们希望将数据加载到Spark Dataframe中,但也需要为此表创建适当的模式

这些字段的Spark模式是什么样的

这个结构正确吗?(特别想知道数字(11,2)、日期、字符(1)字段)

你应使用:

  • 浮点值的
    DoubleType
    DecimalType
    (如
    NUMERIC(11,2)
    )。在我看来,十进制更好,因为它是用大小数运算的
  • LongType
    用于非常大的数字-如
    NUMERIC(18)
    。否则将无法正确存储
  • DateType
    用于日期-可以将其存储为字符串,但如果可以,则应选择更有意义的类型

谢谢!日期类型是否需要遵循特定格式(或转换为特定格式)?(例如MM/DD/YYYY HH:MM:SS)@Joe您可以轻松地将任何格式的字符串转换为日期:此时我们应该使用LongType而不是IntegerType?(例如,当数据库中的字段定义为数字(5)或数字(10)或数字(15)…?)时,整数的最大值为2147483647。如果您使用更高的数字,那么您应该使用LongType
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)
    ) 
)