Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编码器.scala特征的乘积].spark中的模式_Scala_Apache Spark_Database Schema - Fatal编程技术网

编码器.scala特征的乘积].spark中的模式

编码器.scala特征的乘积].spark中的模式,scala,apache-spark,database-schema,Scala,Apache Spark,Database Schema,如何从特质为spark创建模式? 考虑到一个特点: trait A{ val name:String val size:String } 作为: 给出: Error:type arguments do not conform to method product's type parameter bounds [T <: Product] 错误:类型参数不符合方法产品的类型参数界限[T 200我无法向您详细说明这不起作用的原因,但我提出了一个我们在Scala Spark项目中经常使用的替

如何从特质为spark创建模式? 考虑到一个特点:

trait A{
val name:String
val size:String
}
作为:

给出:

Error:type arguments do not conform to method product's type parameter bounds [T <: Product]

错误:类型参数不符合方法产品的类型参数界限[T 200

我无法向您详细说明这不起作用的原因,但我提出了一个我们在Scala Spark项目中经常使用的替代解决方案

编码器的签名。product
看起来像

product[T <: scala.Product](implicit evidence$5 : scala.reflect.runtime.universe.TypeTag[T])

正如一开始所说,我无法解释所有细节,只需提供一个可行的解决方案,并希望它能满足您的需要。

Case类确实支持22列以上,请尝试在所有其他类/对象之外创建。如果您需要创建一个包含大量字段的数据框架架构,这应该是可行的

val schema: StructType = StructType(
    Array(
      StructField(name = "name", StringType),
      StructField(name = "size", StringType)
    )
 )
val data = Seq(Row("Ramanan","29"))
spark.createDataFrame(spark.sparkContext.parallelize(data),schema).show()

谢谢@mike,但是由于case类在参数数量上有一些限制,有没有办法获得大量字段的模式我们正在使用大约200个字段的case类。不确定这是否是最佳解决方案,但22个字段的限制仅在Scala 2.10.x中,而不再在2.11中。我们只是在需要时调整JVM参数使用Maven编译:
jvmArg>-Xss2048K
yes@mike,但实际上字段的数量超过200个。如果字段数量有问题,您还可以将案例类嵌套到案例类中。
val schema: StructType = StructType(
    Array(
      StructField(name = "name", StringType),
      StructField(name = "size", StringType)
    )
 )
val data = Seq(Row("Ramanan","29"))
spark.createDataFrame(spark.sparkContext.parallelize(data),schema).show()