我正在处理一个长度为38个字符的字符串列,实际上是数字。
例如id = '678868938393937838947477478778877 .....'(长38个字符)。
如何将其转换为长整数?我已经尝试使用IntegerType,LongType和DoubleType的强制转换函数,当我尝试显示列时,它会产生Null。
我想这样做的原因是因为我需要使用这个列进行一些内连接,并将其作为String给我带来Java堆空间错误。
有关如何将其强制转换为长整数的任何建议? {此问题试图将字符串转换为长整数}
答案 0 :(得分:1)
长话短说,你根本就没有。 Spark DataFrame
是一个JVM对象,它使用以下类型映射:
IntegerType
- > Integer
MAX_VALUE
等于2 ** 31 - 1 LongType
- > Long
MaxValue
等于2 ** 63 - 1 您可以尝试使用DecimalType
最大允许精度(38)。
df = sc.parallelize([("9" * 38, "9" * 39)]).toDF(["x", "y"])
df.select(col("x").cast("decimal(38, 0)")).show(1, False)
## +--------------------------------------+
## |x |
## +--------------------------------------+
## |99999999999999999999999999999999999999|
## +---------------------------------------
使用较大的数字,您可以强制转换为双倍但不会没有精度损失:
df.select(
col("y").cast("decimal(38, 0)"), col("y").cast("double")).show(1, False)
## +----+------+
## |y |y |
## +----+------+
## |null|1.0E39|
## +----+------+
据说铸造数字类型不会帮助你解决内存错误。