0
votes

Spark: schéma est null

J'essaie de déterminer comment définir le schéma pour l'objet de ligne. Je suis copié le code de Docs https://spark.apache.org/docs/2.4.0/api/scala/index.html#org.apache.spark.sql.types.sparktype

println(row, row.schema)
// ([[1,2,true]],null)


0 commentaires

3 Réponses :


0
votes

Tout d'abord, vous pouvez créer un RDD, puis un fichier de données avec schéma spécifiant de la ligne comme suit: xxx

imprimera: xxx


2 commentaires

Oui, mais je teste udf en fait. Je passe la SEQ (rangée) à cela, alors je pensais que c'est possible.


Vous ne pouvez pas tester l'userDefineFunction en dehors de l'étincelle aussi loin que je sache



2
votes

Vous pouvez essayer d'utiliser genericrowwithschema au lieu de la ligne et l'initialisation avec le schéma: xxx


0 commentaires

0
votes
  val df=Seq(
             |  (1, 2000l, true),
             |  (3,4500l,false)
             | ).toDF("f1","f2","f3")
        df: org.apache.spark.sql.DataFrame = [f1: int, f2: bigint ... 1 more field]

         case class TestCase(f1: Int, f2: Long,f3: Boolean)
        defined class TestCase

        val encoder = org.apache.spark.sql.Encoders.product[TestCase]
        encoder: org.apache.spark.sql.Encoder[TestCase] = class[f1[0]: int, f2[0]: bigint, f3[0]: boolean]

         val dataset = df.as(encoder)
        dataset: org.apache.spark.sql.Dataset[TestCase] = [f1: int, f2: bigint ... 1 more field]

        dataset.schema
        res6: org.apache.spark.sql.types.StructType = StructType(StructField(f1,IntegerType,false), StructField(f2,LongType,false), StructField(f3,BooleanType,false))

        df.schema
        res7: org.apache.spark.sql.types.StructType = StructType(StructField(f1,IntegerType,false), StructField(f2,LongType,false), StructField(f3,BooleanType,false))



         dataset.printSchema
        root
         |-- f1: integer (nullable = false)
         |-- f2: long (nullable = false)
         |-- f3: boolean (nullable = false)

0 commentaires