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)
3 Réponses :
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: imprimera: p>
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
Vous pouvez essayer d'utiliser genericrowwithschema code> au lieu de la ligne et l'initialisation avec le schéma:
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)