我有一個RDD的元素是類型(Long,String)。出於某種原因,我想將整個RDD保存到HDFS中,並且稍後還將該RDD讀回到Spark程序中。有可能這樣做嗎?如果是這樣,怎麼樣?如何將RDD保存到HDFS中,然後再讀回?
6
A
回答
5
這是可能的。
在RDD中,您有saveAsObjectFile
和saveAsTextFile
函數。元組存儲爲(value1, value2)
,所以稍後可以解析它。
讀書可以從SparkContext textFile
功能,然後.map
做才能消除()
所以: 版本1:
rdd.saveAsTextFile ("hdfs:///test1/");
// later, in other program
val newRdds = sparkContext.textFile("hdfs:///test1/part-*").map (x => {
// here remove() and parse long/strings
})
版本2:
rdd.saveAsObjectFile ("hdfs:///test1/");
// later, in other program - watch, you have tuples out of the box :)
val newRdds = sparkContext.sc.sequenceFile("hdfs:///test1/part-*", classOf[Long], classOf[String])
3
我會建議如果您的RDD是表格格式,請使用DataFrame。一個數據框是一個表或者二維數組結構,其中每列包含一個變量的度量值,每一行包含一個案例。 DataFrame由於其表格格式而具有額外的元數據,這允許Spark在最終查詢上運行某些優化。 其中一個RDD是一個彈性分佈式數據集,它更像是一個黑盒或抽象的數據無法優化的核心。 但是,您可以從DataFrame轉到RDD,反之亦然,您可以通過toDF方法從RDD轉到DataFrame(如果RDD採用表格格式)。
下面是創建/存儲在HDFS CSV和鑲木格式的數據幀,
val conf = {
new SparkConf()
.setAppName("Spark-HDFS-Read-Write")
}
val sqlContext = new SQLContext(sc)
val sc = new SparkContext(conf)
val hdfs = "hdfs:///"
val df = Seq((1, "Name1")).toDF("id", "name")
// Writing file in CSV format
df.write.format("com.databricks.spark.csv").mode("overwrite").save(hdfs + "user/hdfs/employee/details.csv")
// Writing file in PARQUET format
df.write.format("parquet").mode("overwrite").save(hdfs + "user/hdfs/employee/details")
// Reading CSV files from HDFS
val dfIncsv = sqlContext.read.format("com.databricks.spark.csv").option("inferSchema", "true").load(hdfs + "user/hdfs/employee/details.csv")
// Reading PQRQUET files from HDFS
val dfInParquet = sqlContext.read.parquet(hdfs + "user/hdfs/employee/details")
相關問題
- 1. 將groupBy rdd結果保存回HDFS
- 2. 星火:保存RDD在HDFS
- 3. 保存NSString,然後將它讀回
- 4. 如何將outputtext值保存到對象然後再保存到數據庫?
- 5. 如何將mllib.recommendation.MatrixFactorizationModel保存到HDFS中?
- 6. RDD的最後一項未保存到HDFS
- 7. 閱讀plist到nsmutabledictionary,更新字典,然後再保存它
- 8. 如何將面板/框架保存到文件然後讀取?
- 9. 將會話保存到標籤,然後保存回數據庫
- 10. 如何將列表保存到文件中,然後將項目讀回到ListBox中?
- 11. 如何將畫布保存爲jpeg,然後將該jpeg保存到系統中?
- 12. 從Spark中將JavaRDD保存到HDFS
- 13. 將.txt文件讀入地圖,然後再次保存爲.txt文件?
- 14. 將文件的前100個字節移動到文件的末尾,然後再保存並再次保存
- 15. PHP API將JSON保存到文件,然後讀取文件
- 16. 將數據保存到SQL Server數據庫中,然後再發送郵件
- 17. 將Gridview數據保存到按鈕中,然後再次加載它?
- 18. 如何將箭頭符號寫入文件然後再讀回來?
- 19. fadeToggle div然後再回
- 20. 從文件中讀取,存儲到鏈表中,然後再打印到文件
- 21. 如何將pyspark數據框寫入HDFS,然後如何將其讀回數據框?
- 22. 星火將結果保存到HDFS
- 23. 如何將timedelta轉換爲字符串,然後再返回
- 24. 在文件名中讀,操縱它,然後將其保存
- 25. 如何將分數保存到SharedPreferences然後更新它?
- 26. 如何將矩陣保存到txt文件中,然後在python中以矩陣形式再次打開它?
- 27. 如何將RDD插入(不保存或更新)到Cassandra?
- 28. VIM如何顯示到終端,然後再取回?
- 29. 如何將分組的Spark RDD內容平鋪爲單獨的行,然後保存到文件
- 30. 將列表框選項值保存到mysql然後再次顯示php mysql
四重奏的例子中,這是一個純溶液:)。但是我們如何使用textFile來讀取,因爲saveAsText會創建許多不同的文件。 – pythonic
@pythonic查看我的更新 - 您可以閱讀文件的範圍。 RDD的每個部分都保存在文件'part-XYZŹŻ'中,所以我們只能讀取每個文件的名稱 –