0
在接收机考虑下面的代码片断火花流 - 定制接收器和数据帧推断模式
val incomingMessage = subscriberSocket.recv(0)
val stringMessages = new String(incomingMessage).stripLineEnd.split(',')
store(Row.fromSeq(Array(stringMessages(0)) ++ stringMessages.drop(2)))
在接收机,我不会想要的表(其由stringMessages(0)
指示)转换每列类型的到实际的表格类型。
在代码的主要部分,当我做
val df = sqlContext.createDataFrame(eachGDNRdd,getSchemaAsStructField)
println(df.collect().length)
我得到下面的错误
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
at scala.runtime.BoxesRunTime.unboxToDouble(BoxesRunTime.java:119)
at org.apache.spark.sql.catalyst.expressions.BaseGenericInternalRow$class.getDouble(rows.scala:44)
现在,该架构包含两个字符串和Int场。我已经交叉验证,按字段匹配字段。但是,看起来像spark数据框不是推断类型。
问题
1.不宜火花推断架构的类型,在运行时(除非有矛盾)?
2.由于表是动态的,因此架构会根据每行的第一个元素(包含表名称)而变化。有没有简单的建议方式来即时修改模式?
或者我错过了明显的东西?