我有一组CSV的,我通过Sqoop'ing一个mySQL数据库产生的。我试图将它们定义为Spark中的一个框架的源代码。
源数据库中的模式包含几个Long数据类型的字段,实际上在这些字段中存储了大量的数字。
当试图访问该数组时,Scala在解释这些时会阻塞,因为我在长整数上没有L后缀。
例如,这会抛出一个错误:val test: Long = 20130102180600
如果成功:val test: Long = 20130102180600L
有没有什么方法可以强制Scala将这些字段解释为不带后缀的长整数?由于数据的规模,我认为在字段从数据库中出来时对其进行后处理是不可行的。
1条答案
按热度按时间q5lcpyga1#
给予模式,如自述文件中的示例所示:
字符串
当然,除了对大整数字段使用
LongType
之外。查看代码,这看起来确实应该工作:使用
TypeCast.castTo
将字段从String
转换为所需的类型,而LongType
的TypeCast.castTo
只需调用datum.toLong
,即可按需工作(你可以在Scala REPL中检查"20130102180600".toLong
)。事实上,InferSchema
也可以处理这种情况。我强烈怀疑这个问题是不同的:也许这些数字甚至超出了Long
的范围?