2 votes

convertir une chaîne de caractères en BigInt dataframe spark scala

J'essaie d'insérer des valeurs dans un cadre de données dont les champs sont string en postgresql base de données dans laquelle les champs sont importants int type.

Je n'ai pas trouvé comment les mouler en grand. int J'ai utilisé avant IntegerType et je n'ai pas eu de problème. Mais avec ce dataframe, le cast me donne un entier négatif.

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

Toute aide à l'utilisation de Big Int serait appréciée. scala soutient Big Int, mais comment faire ?

4voto

hi-zir Points 19277

Pour les grands nombres entiers, il convient d'utiliser LongType :

cabArticleGold.withColumn("CAB", 'CAB.cast(LongType))

ou

cabArticleGold.withColumn("CAB", 'CAB.cast("long"))

Vous pouvez également utiliser DecimalType

cabArticleGold.withColumn("CAB", 'CAB.cast(DecimalType(38, 0)))

ou

cabArticleGold.withColumn("CAB", 'CAB.cast("decimal(38, 0)"))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X