我有一個模式類似 -如何允許在Spark 2的數據框中接受None值?
val schema = StructType(Seq (
StructField("a", StringType, true),
StructField("b", StringType, true),
StructField("c", StringType, true)
))
and making a dataframe like -
import scala.collection.JavaConverters._
val listrow: List[Row] = List(Row("E-001", "P-001", None), Row("E-001", "P-001", "Attending"))
val rdd = sqlContext.sparkContext.parallelize(listrow)
val df = sqlContext.createDataFrame(rdd, scm)
現在,當我做了df.first(),我得到一個錯誤,其實質是 - 了java.lang.RuntimeException:錯誤而編碼: java.lang.RuntimeException:scala.None $不是字符串模式的有效外部類型
請注意,我需要僅以此方式創建df。以上只是一個例子,但生產中的代碼有點複雜。我認爲它曾經在Spark 1.6中工作,但在Spark 2.0.1中開始失敗。這與編碼器有關嗎?請注意,一些數據將始終爲None,並且df需要處理它。有沒有辦法處理這個或數據不能有沒有?
其他人在這裏也看到了這個,可能知道解決方案是什麼?
感謝預期!
您的列需要字符串,但「None」不是字符串。將None轉換爲字符串或將列更改爲接受'Option [String]'而不是'String'並將字符串轉換爲'Option [String]'s。真的,我想要修正產生這些「無」的代碼,這似乎是一個主要的設計缺陷。 – puhlen
我同意。但是有什麼可以通過架構來完成的呢? –
你想讓數據在數據框中看起來像什麼?你真的想要不同的類型(選項和字符串)坐在同一列嗎?或者你希望能夠插入這兩種類型並讓它們自動均化爲單一類型? – puhlen