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.由於表是動態的,因此架構會根據每行的第一個元素(包含表名稱)而變化。有沒有簡單的建議方式來即時修改模式?
或者我錯過了明顯的東西?