簡體   English   中英

如何使用 listOfData 和模式創建 spark DataFrame

[英]how to create a spark DataFrame using a listOfData and schema

我正在嘗試從數據列表創建一個 DataFrame 並且還想在其上應用架構。 從 Spark Scala doc 我試圖使用這個 createDataframe 簽名,它接受行列表和模式作為 StructType。

def createDataFrame(rows: List[Row], schema: StructType): DataFrame

我在下面嘗試的示例代碼

import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
val simpleData = List(Row("James", "Sales", 3000),
  Row("Michael", "Sales", 4600),
  Row("Robert", "Sales", 4100),
  Row("Maria", "Finance", 3000)
)

val schema = StructType(Array(
StructField("name",StringType,false),
StructField("department",StringType,false),
StructField("salary",IntegerType,false)))


val df = spark.createDataFrame(simpleData,schema)

但我得到以下錯誤

command-3391230614683259:15: error: overloaded method value createDataFrame with alternatives:
  (data: java.util.List[_],beanClass: Class[_])org.apache.spark.sql.DataFrame <and>
  (rdd: org.apache.spark.api.java.JavaRDD[_],beanClass: Class[_])org.apache.spark.sql.DataFrame <and>
  (rdd: org.apache.spark.rdd.RDD[_],beanClass: Class[_])org.apache.spark.sql.DataFrame <and>
  (rows: java.util.List[org.apache.spark.sql.Row],schema: org.apache.spark.sql.types.StructType)org.apache.spark.sql.DataFrame <and>
  (rowRDD: org.apache.spark.api.java.JavaRDD[org.apache.spark.sql.Row],schema: org.apache.spark.sql.types.StructType)org.apache.spark.sql.DataFrame <and>
  (rowRDD: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row],schema: org.apache.spark.sql.types.StructType)org.apache.spark.sql.DataFrame
 cannot be applied to (List[org.apache.spark.sql.Row], org.apache.spark.sql.types.StructType)
val df = spark.createDataFrame(simpleData,schema)

請建議我做錯了什么。

錯誤告訴你它需要一個 Java 列表而不是一個 Scala 列表:

import scala.jdk.CollectionConverters._

val df = spark.createDataFrame(simpleData.asJava, schema)

如果您使用的 Scala 版本早於 2.13,請參閱此問題以獲取CollectionConverters替代方案。

另一種選擇是傳遞一個 RDD:

val df = spark.createDataFram(sc.parallelize(simpleData), schema)

sc是 SparkContext 對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM