将字符串转换为 BigInt 数据帧 spark scala

Mah*_*HTB 3 postgresql dataframe apache-spark apache-spark-sql

我试图将值插入到数据框中,其中字段是string类型到postgresql数据库中,其中字段是大int类型。

我没有找到如何将它们转换为大int。我在使用 IntegerType 之前没有问题。但是使用这个数据框,演员表导致我负整数

val sparkSession = SparkSession.builder.master("local").appName("spark session example").getOrCreate()

  val cabArticleGold = sparkSession.sqlContext.load("jdbc", Map("url" -> "jdbc:oracle:thin:System/maher@//localhost:1521/XE", "dbtable" -> "IPTECH.TMP_ARTCAB")).select("CODEART", "CAB").limit(10)
import sparkSession.sqlContext.implicits._
 cabArticleGold.show()
cabArticleGold.withColumn("CAB",'CAB.cast(IntegerType)).foreach(row=>println(row(1)))

232524399
-1613725482
232524423
-1613725465
232524437
-1191331072
3486
-1639094853
232524461
1564177573
Run Code Online (Sandbox Code Playgroud)

任何使用 Big Int 的帮助将不胜感激。我知道scala支持 Big Int,但我该怎么做?

hi-*_*zir 6

对于大整数,您应该使用LongType

cabArticleGold.withColumn("CAB", 'CAB.cast(LongType))
Run Code Online (Sandbox Code Playgroud)

或者

cabArticleGold.withColumn("CAB", 'CAB.cast("long"))
Run Code Online (Sandbox Code Playgroud)

你也可以使用 DecimalType

cabArticleGold.withColumn("CAB", 'CAB.cast(DecimalType(38, 0)))
Run Code Online (Sandbox Code Playgroud)

或者

cabArticleGold.withColumn("CAB", 'CAB.cast("decimal(38, 0)"))
Run Code Online (Sandbox Code Playgroud)