鑒于此,過去似乎已經這樣做了,但是...:
val arrayStructData2 = Seq(
Row("James", 2),
Row("Alex", 3)
)
val arrayStructSchema2 = new StructType()
.add("names",new StructType()
.add("name", StringType)
.add("extraField", IntegerType)
)
val df = spark.createDataFrame(spark.sparkContext.parallelize(arrayStructData2),arrayStructSchema2)
df.printSchema()
df.show()
我明白了:
...
Caused by: RuntimeException: java.lang.String is not a valid external type for schema of struct<name:string,extraField:int>
不能馬上看到。
uj5u.com熱心網友回復:
對于其他人,作為提醒,需要Row(Row...如下:
val arrayStructData2 = Seq(
Row(Row("James", 2)),
Row(Row("Alex", 3))
)
不那么明顯的錯誤恕我直言。
uj5u.com熱心網友回復:
當您DataFrame使用createDataFrame注冊架構創建時,但實際上沒有評估任何內容,這就是為什么df.printSchema按預期作業。當您執行df.show的DataFrame評估和星火嘗試你給它的第一個值(在本例中的String)加載到struct這導致runtimeException現在看到你。這是 Spark 3.1.1 的 Scaladoc:
使用給定的模式從包含 Rows 的 java.util.List 創建一個 DataFrame。確保提供的 List 的每一行的結構與提供的架構相匹配很重要。否則會出現運行時例外。
它告訴您您正試圖將字串強制轉換為結構體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311440.html
上一篇:如何使用Databricks在ApacheSpark中使用SparkSQL或PySpark查詢JSON中的陣列
下一篇:為什么合并會導致處理的節點太少?
