2017-06-04 108 views
1

我有我的數據集在HDFS中可用。我正在閱讀並執行過濾操作。更改PAspark中saveAsTextFile選項的分隔符rdd

dir = sc.textFile('/datasets/DelayedFlights.csv').filter(lambda x: 
int(x.split(',')[24]) == 1).map(lambda y: y.split(',')) 
The output of above operation is 
[u'1763', u'2008', u'1', u'3', u'4', u'922.0', u'915', u'', u'1050', u'WN', 
u'1069', u'N630WN', u'', u'95.0', u'', u'', u'7.0', u'SAN', u'SMF', u'480', 
u'', u'12.0', u'0', u'N', u'1', u'', u'', u'', u'', u''] 
[u'1911', u'2008', u'1', u'3', u'4', u'2325.0', u'1900', u'', u'2030', 
u'WN', u'2092', u'N302SW', u'', u'90.0', u'', u'', u'265.0', u'SFO', u'SAN', 
u'447', u'', u'11.0', u'0', u'N', u'1', u'', u'', u'', u'', u''] 
[u'2651', u'2008', u'1', u'4', u'5', u'1949.0', u'1905', u'', u'1910', 
u'WN', u'1403', u'N504SW', u'', u'65.0', u'', u'', u'44.0', u'BOI', u'RNO', 
u'335', u'', u'11.0', u'0', u'N', u'1', u'', u'', u'', u'', u''] 

我想改變保存上述文件使用saveAsTextFile與標籤分隔符 HDFS路徑中的任何一個可以說我如何分隔符從逗號改爲標籤在Python來實現這個轉換

回答

0

的一種方式將RDD轉換爲數據幀,然後將格式爲csv的數據幀與分隔符選項一起保存爲選項卡,如下所示。

rdd = spark.sparkContext.parallelize([['1763', '2008', '1', '3', '4', '922.0'], ['1763', '2008', '1', '3', '4', '922.0'], ['1763', '2008', '1', '3', '4', '922.0']]) 
df = spark.createDataFrame(rdd.map(lambda x: tuple(x))) 
df.write.format('com.databricks.spark.csv').option("delimiter", '\t').save('/path/to/csv/file/') 

如果您不想將您的rdd轉換爲數據框,請按照以下代碼片段進行操作。

rdd.map(lambda x: '\t'.join(x)).saveAsTextFile('test_dir/output') 

對於上述方法,建議使用DataFrame方法。

+0

你能告訴我爲什麼你使用tuple(x)創建數據框而不是createDataFrame(rdd,schema) – Rahul

+0

,這是因爲元組的每個元素都將被視爲單獨的列。例如'[('a1','b1','c1'),('a2','b2','c2'),('a3','b3','c3')]''一個DataFrame的3列.. –

+0

我得到這個錯誤TypeError:'DataFrameWriter'對象不可調用 – Rahul