Spark2.X讀取多種檔案格式資料
Spark2.0+的檔案讀取
轉載自:點選開啟連結 https://blog.csdn.net/next__one/article/details/78840908
Spark可以讀取多種格式檔案,csv,json,parque。因此對應就有很多函式與之對應。在Spark2.0以後一般使用SparkSession來操作DataFrame、Dataset來完成資料分析。這些讀取不同格式檔案的函式就是SparkSession的成員DataFrameReader的方法。該類就是將檔案系統(HDFS,LocalFileSystem(一定要在每臺機器上都有的檔案,不然會找不到檔案,因為不確定executor會在哪臺機器上執行,如果是本地檔案,執行executor機器上一定要有該檔案))中的檔案讀取到Spark中,生成DataFrame的類。下面來看看具體的檔案讀取。
1.CSV
其實該方法叫CSV不是很好,因為它不止可以讀CSV檔案,他可以讀取一類由分隔符分割資料的檔案,由於這類檔案中CSV是代表,所以該函式才叫CSV吧。
1.1標準CSV
csv資料
特徵:有空值?表示,有表頭,型別明確
"id_1","id_2","cmp_fname_c1","cmp_fname_c2","cmp_lname_c1","cmp_lname_c2","cmp_sex","cmp_bd","cmp_bm","cmp_by","cmp_plz","is_match"
41264,44629,1,?,1,?,1,1,1,1,1,TRUE
28871,41775,1,?,1,?,1 ,1,1,1,1,TRUE
99344,99345,1,?,1,?,1,1,1,1,1,TRUE
31193,66985,1,?,1,?,1,1,1,1,0,TRUE
24429,25831,1,?,1,?,1,1,1,1,1,TRUE
23571,49029,1,?,1,?,1,1,1,1,1,TRUE
6884,6885,1,?,1,?,1,1,1,1,1,TRUE
7144,9338,1,?,1,?,1,1,1,1,1,TRUE
spark程式碼:
val spark = SparkSession.builder().appName("fileRead").getOrCreate()
import spark.implicits._
val data1 = spark.read
// 推斷資料型別
.option("inferSchema", true)
// 設定空值
.option("nullValue", "?")
// 表示有表頭,若沒有則為false
.option("header", true)
// 檔案路徑
.csv("ds/block_10.csv")
// 快取
.cache()
// 列印資料格式
data1.printSchema()
// 顯示資料,false引數為不要把資料截斷
data1.show(false)
效果:
1.2TSV
TSV資料
特徵:無頭,有資料型別,\t分割
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
244 51 2 880606923
166 346 1 886397596
298 474 4 884182806
115 265 2 881171488
253 465 5 891628467
305 451 3 886324817
6 86 3 883603013
spark程式碼:
val cols = Seq("user_id", "item_id", "rating", "timestamp")
val data2 = spark.read
// 推斷資料型別
.option("inferSchema", true)
// 沒有表頭false
.option("header", false)
// 指定分隔符
.option("delimiter", "\t")
.csv("movie/u.data")
// 設定頭
.toDF(cols: _*)
.cache()
data2.printSchema()
data2.show()
// 計數
data2.count()
結果:
2.JSON檔案
JSON不像CSV那樣,他是半結構化的資料,因此他可以表示更加複雜的資料型別,但是缺點也同樣明顯,儲存同樣的資料,JSON檔案更大。
資料:有點複雜,介紹一下
軌跡ID long,使用者ID long,time timestamp,td string,trail [id int ,ts long,alt double,lon double ,alt double,d string]
主要就是大物件裡面有一個數組,數組裡面有很多小物件(數量不固定),csv是難以表示這種資料的。
但是。。。處理起來很簡單
val jsonpath = "/home/wmx/hive/warehouse/trail/sample40.json"
val data3 = spark.read.json(jsonpath).cache()
data3.printSchema()
// 因為有點多隻顯示1條,不截斷
data3.show(1,false)
結果
這裡大家可以看到,時間戳資料被解析成string了,但是spark內建的資料型別是支援Date的
因此要處理資料型別:
改為
// 按順序把型別全寫下來
val schema: StructType = StructType(Seq(
StructField("tid", IntegerType, true),
StructField("uid", IntegerType, true),
StructField("st", TimestampType, true),
StructField("td", StringType, true),
StructField("trail", ArrayType(StructType(Seq(
StructField("id", IntegerType, true),
StructField("ts", LongType, true),
StructField("lat", DoubleType, true),
StructField("alt", DoubleType, true),
StructField("lon", DoubleType, true),
StructField("d", StringType, true)))), true)));
val data4 = spark.read
.schema(schema)
.json(jsonpath)
.cache()
data4.printSchema()
data4.show(1, true)
結果:
型別完全匹配:
相關推薦
Spark2.X讀取多種檔案格式資料
Spark2.0+的檔案讀取轉載自:點選開啟連結 https://blog.csdn.net/next__one/article/details/78840908Spark可以讀取多種格式檔案,csv,json,parque。因此對應就有很多函式與之對應。在Spark2.0
最新版Spark2.2讀取多種檔案格式資料
Spark2.0+的檔案讀取 Spark可以讀取多種格式檔案,csv,json,parque。因此對應就有很多函式與之對應。在Spark2.0以後一般使用SparkSession來操作DataFrame、Dataset來完成資料分析。這些讀取不同格式檔案的函式就是SparkSessi
Java讀取多種檔案格式的檔案(pdf,pptx,ppt,doc,docx...)
通過開源pdfbox和poi進行處理多種檔案格式的文字讀入 1.需要的jar的maven座標: <dependency> <groupId>org.apache.pdfbox</groupId> <
spark2 sql讀取json檔案的格式要求
問題導讀1.spark2 sql如何讀取json檔案?2.spark2讀取json格式檔案有什麼
C++如何讀取txt檔案的資料並且以二位陣列存到記憶體中
本次實驗主要的目的就是讀取txt的資料,在上次博文中說到如何讀取txt的資料,那篇博文讀了一行資料並存在了一個一維向量中,本次實現讀取二維向量。直接上程式碼: 解釋一下:程式碼中的40代表有40行,8064代表有8064列。 #include <iostream> #includ
java讀取配置檔案.properties資料
util.properties testkey=test123 java_web: import java.util.Properties; import org.springframework.stereotype.Component; /** * 獲取配置檔案資訊
C#不用ArcEngine,生成Shp檔案(二)---------讀取.shp檔案格式
上一篇介紹了Shape files檔案結構,在這一篇,以面檔案為例,寫一下如何讀取.shp檔案,以面檔案為例。 首先在ArcMap裡面新建一個名為 三角形面 的 shp檔案,用做測試資料。如下 測試資料下載地址為:http://download.csdn.net/d
讀取csv檔案的資料
在處理資料時,我們往往發現csv檔案中的資料並不是我們都需要的。我們往往需要指定列: 方法一:使用pandas讀取csv檔案的指定列: https://blog.csdn.net/grey_csdn/article/details/70186735 data =
程式讀取配置檔案中資料顯示在頁面上
1.首先在配置檔案中增加要讀取的資料 cas.cmCustPayment.receiptInvoiceName=\u9996\u94A2\u667A\u65B0\u8FC1\u5B89\u7535\u78C1\u6750\u6599\u6709\u9650\u516C\u53F8 ca
基於ConfigManager讀取配置檔案的資料
獲取配置檔案的配置資訊(比如資料庫的配置資訊,redis的配置資訊) 如何讓使用者只能建立一個ConfigManager?單例模式:(1)把構造方法私有 (2)程式提供給別人唯一物件 單例模式的兩種實現方式:餓漢方式 懶漢方式(執行緒不安全) 提供給別人一個唯一的C
SparkSQL寫入多種檔案格式
需求: 將資料庫中的資料讀取出來並以text json csv三種格式寫入到本地檔案或者hdfs中 csv格式:能夠以excel的形式開啟 程式碼實現: package cn.ysjh0014.SparkSql import java.util.Propert
讀取xlsl檔案的資料
package com.sxf; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.xssf.usermodel.XSSFCell; import
DCMTK讀取DICOM檔案-----獲取資料集-----建立DicomDIr
The following example shows how to load a DICOM file and output the patient's name: DcmFileFormat fileformat; OFCondition status = fileform
伺服器公共庫開發--讀取ini檔案格式的類
/******************************************************************** created: 2008/07/28 filename: config.h author: Lichuang
SpringMVC 實現POI讀取Excle檔案中資料匯入資料庫(上傳)、匯出資料庫中資料到Excle檔案中(下載)
package com.shiliu.game.utils; import java.io.OutputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import
C++:依次讀取TXT檔案各行資料
// FileHandle.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> #include <fstream> #include <string> int main() { s
python處理CSV檔案格式資料
1、CSV檔案 要在文字檔案中儲存資料,最簡單的方式是將資料作為一系列以逗號分隔的值(CSV)寫入檔案,這樣的檔案稱為CSV檔案。 2、分析CSV檔案頭 1)呼叫csv.reader()將儲存的檔案物件作為實參傳遞給它,從而建立一個與檔案相關聯的閱讀器物件
matlab讀取文字檔案、資料檔案等
matlab檔案讀取總結 matlab的檔案讀取函式功能可以讀取各種檔案型別,包括: textread(字母和數值每行格式一致) xlsread(讀取excel檔案) importdata(字母和數
MATLAB讀取fig檔案中的資料(得到x、y資料)
https://zhidao.baidu.com/question/256057475.html 注意大小寫!! 假設你的圖片是figure1,使用下面的語句即可得到圖上點的座標 h=open('A.fig'); a=get(h); b=get(a.Children); c=get(b.Ch
如何讀取pkl的檔案中資料並存入txt格式中
開啟.pkl檔案程式碼: import cPickle as pickle f = open('test.pkl') inf = pickle.load(f) print inf 再開啟一個txt檔案,向內寫入剛才讀取的資訊 ft = open('te