2015-04-19 60 views
4

我正在嘗試使用Spark-CSV包(https://github.com/databricks/spark-csv)將csv文件讀入Spark DataFramesSpark-csv數據源:推斷數據類型

一切正常,但所有列都假設爲StringType

如Spark SQL文檔(https://spark.apache.org/docs/latest/sql-programming-guide.html)所示,對於內置源(如JSON),可以自動推斷包含數據類型的模式。

是否可以自動推斷CSV文件中列的類型?

+0

。 1. StringTypes是SparkSQL中的一個字段類型。 2.你所要求的不是很清楚,你能更具體地瞭解你正在努力實現什麼 – eliasah

+0

我在問自動類型推斷,它可以在諸如JSON之類的內置數據源中使用。即如果從json文件中使用'sqlContext.jsonFile(「...」)'創建df,並指定一個整數和一個字符串字段 - 這些類型將在模式中定義。這是可能的CSV數據源格式? –

回答

3

不幸的是,這目前不被支持,但它將是一個非常有用的功能。目前他們必須在DLL中聲明。從我們的文檔中獲得:

header:當設置爲true時,第一行文件將用於命名列,並且不會包含在數據中。所有類型都將被假定爲字符串。默認值爲false。

這就是你所看到的。

請注意,可以在查詢時間推斷模式,例如,

select sum(mystringfield) from mytable 
+1

謝謝,這就是我想的,謝謝你的確認。我同意 - 這將是極好的功能。精確的類型匹配可能是不可行的,但各種啓發式可能是可能的:基於列中的前N個記錄的類型,基於隨機N記錄,基於N /尺寸分數等等 –

1

從星火2開始,我們可以使用選項 '則InferSchema' 是這樣的: getSparkSession()閱讀()選項( 「則InferSchema」, 「真」)CSV( 「YOUR_CSV_PATH」)