Spark 之 讀寫 csv檔案
轉自:https://www.iteblog.com/archives/1380.html
CSV格式的檔案也稱為逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號。在本文中的CSV格式的資料就不是簡單的逗號分割的),其檔案以純文字形式存表格資料(數字和文字)。CSV檔案由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由欄位組成,欄位間的分隔符是其它字元或字串,最常見的是逗號或製表符。通常,所有記錄都有完全相同的欄位序列。
本篇文章將介紹如何使用Spark 1.3+的外部資料來源介面來自定義CSV輸入格式的檔案解析器。這個外部資料來源介面是由databricks公司開發並開源的(地址:https://github.com/databricks/spark-csv),通過這個類庫我們可以在
< dependency >
< groupId >com.databricks</ groupId >
< artifactId >spark-csv_2.10</ artifactId >
< version >1.0.3</ version >
</ dependency >
|
目前spark-csv_2.10的最新版就是1.0.3。如果我們想在Spark shell裡面使用,我們可以在--jars
[[email protected]
$] bin /spark-shell
--packages com.databricks:spark-csv_2.10:1.0.3
|
如果想及時瞭解Spark、Hadoop或者Hbase相關的文章,歡迎關注微信公共帳號:iteblog_hadoop
和《Spark SQL整合PostgreSQL》文章中用到的load函式類似,在使用CSV類庫的時候,我們需要在options
中傳入以下幾個選項:
1、path
:看名字就知道,這個就是我們需要解析的CSV檔案的路徑,路徑支援萬用字元;
2、header
3、
delimiter
:預設情況下,CSV是使用英文逗號分隔的,如果不是這個分隔,我們就可以設定這個選項。4、
quote
:預設情況下的引號是'"',我們可以通過設定這個選項來支援別的引號。5、
mode
:解析的模式。預設值是PERMISSIVE
,支援的選項有(1)、
PERMISSIVE
:嘗試解析所有的行,nulls are inserted for missing tokens and extra
tokens are ignored.(2)、
DROPMALFORMED
:drops lines which have fewer or more tokens than expected(3)、
FAILFAST
: aborts with a RuntimeException if encounters any malformed
line
如何使用
1、在Spark SQL中使用
我們可以通過註冊臨時表,然後使用純SQL方式去查詢CSV檔案:
CREATE
TABLE
cars
USING
com.databricks.spark.csv
OPTIONS
(path "cars.csv" ,
header "true" )
|
我們還可以在DDL中指定列的名字和型別,如下:
CREATE
TABLE
cars (yearMade double ,
carMake string, carModel string, comments string, blank string)
USING
com.databricks.spark.csv
OPTIONS
(path "cars.csv" ,
header "true" )
|
2、通過Scala方式
推薦的方式是通過呼叫SQLContext
的load/save
函式來載入CSV資料:
import
org.apache.spark.sql.SQLContext
val
sqlContext =
new
SQLContext(sc)
val
df =
sqlContext.load(
|