2016-12-26 116 views
2

其實我正在Apache Spark Python的工作區中使用cloudera的數據塊。這個想法是讀取一個csv並格式化每個字段。將列表項目轉換爲定義的數據類型RDD

所以,第一步是讀取CSV:

uber = sc.textFile("dbfs:/mnt/uber/201601/pec2/uber_curated.csv") 

下一步是在每一行轉換爲值的列表:

uber_parsed = uber.map(lambda lin:lin.split(",")) 
print (uber_parsed.first()) 

結果是:

[u'B02765', u'2015-05-08 19:05:00', u'B02764', u'262', u'Manhattan',u'Yorkville East'] 

但是,現在我需要將下一個值列表中的每個項目轉換爲下一個格式String,Date,String,Integer,Strin G弦。

[[u'B02765', u'2015-05-08 19:05:00', u'B02764', u'262', u'Manhattan', u'Yorkville East'], 
[u'B02767', u'2015-05-08 19:05:00', u'B02789', u'400', u'New York', u'Yorkville East']] 

有人知道該怎麼做嗎?

回答

1

您可以使用csv閱讀器。在Spark 1.x中,您需要一個外部依賴項(spark-csv)。

from pyspark.sql.types import * 

sqlContext.read.format("csv").schema(StructType([ 
    StructField("_1", StringType()), 
    StructField("_2", TimestampType()), 
    StructField("_3", StringType()), 
    StructField("_4", IntegerType()), 
    StructField("_5", StringType()), 
    StructField("_6", StringType()), 
])).load("dbfs:/mnt/uber/201601/pec2/uber_curated.csv").rdd 

sqlContext.read.format("csv").schema(StructType([ 
    StructField("_1", StringType()), 
    StructField("_2", DateType()), 
    StructField("_3", StringType()), 
    StructField("_4", IntegerType()), 
    StructField("_5", StringType()), 
    StructField("_6", StringType()), 
])).option("dateFormat", "yyyy-dd-MM HH:mm:ss").load(
    "dbfs:/mnt/uber/201601/pec2/uber_curated.csv" 
).rdd 

可以更換(_1_2 .. _n)與描述字段名。

+0

感謝您的回覆,但生成此錯誤。 'RDD'對象不可調用 – UserCode

+0

抱歉,無關的括號。現在應該可以。 – user7337271

+0

偉大的工程。 – UserCode

相關問題