2017-06-28 74 views
0

1)如何克隆RDD對象到另一個對象?如何克隆RDD對象[Pyspark]

2)或讀取一個csv文件,我使用熊貓閱讀,然後使用sc.parallelize將列表轉換爲RDD對象。沒關係,或者我應該使用一些RDD方法直接從csv讀取?

3)我知道我需要將大量數據轉換爲RDD,但我是否也需要將單個int值轉換爲RDD?如果我只是聲明一個int變量,它會分佈在節點上嗎?

+0

爲什麼你需要熊貓?如果您的數據適合熊貓數據框,並且您可以將它放在單個機器的內存中,我不確定您是否需要Spark –

+0

@ cricket_007我現在使用的數據是非常小的文件。我需要擴展我的模塊,因此使用火花。我是RDD的noob,所以不知道如何與他們合作。 –

+0

如果您使用的是Spark2(帶有內置的csv閱讀器),那麼'Dataset'是適當的對象類 –

回答

1

可以使用火花CSV到REAS CSV文件火花

這裏是你的火花2.X如何閱讀

spark.read 
    .schema(my_schema) 
    .option("header", "true") 
    .csv("data.csv") 

火花< 2.0

sqlContext 
    .read.format("com.databricks.spark.csv") 
    .option("header", "true") 
    .option(schema, my_schema) 
    .load("data.csv")) 

對於根據您的要求更多選擇請參考here

您可以將RDDdataframe分配給另一個變量進行克隆。

希望這會有所幫助。

+0

是不是scala語法?我不認爲你回答了其他問題 –

+0

如何克隆RDD?我正在使用rdd.distinct(),但它搞亂了值的索引 –

+0

克隆是什麼意思?你爲什麼需要這樣做? –

0

我對你的問題有點困惑。 RDD是一個不可變的對象,因此您可以將數據加載到一個RDD中,然後可以根據您的初始RDD定義兩種不同的轉換。每次轉換都將使用原始的RDD並生成新的RDD。

事情是這樣的:

# load your CSV 
loaded_csv_into_rdd = sc.textFile('data.csv').map(lambda x: x.split(',')) 
# You could even .cache or .persist the data 

# Here two new RDDs will be created based on the data that you loaded 
one_rdd = loaded_csv_into_rdd.<apply one transformation> 
two_rdd = loaded_csv_into_rdd.<apply another transformation> 

這是使用低級別的API,RDDS。如果您嘗試使用DataFrame API(數據集[Row]),可能會更好,因爲它可以推斷出架構,並且通常會更容易使用。

2)如果你想要使用RDDs,你要找什麼是sc.textFile,然後你用逗號分割來生成你可以管理的列表。

在3)中,在Spark中你不需要聲明變量。你正在使用函數式編程,所以狀態不是你需要保留的東西。你有累加器是一種特殊情況,但一般來說,你正在定義應用於整個數據集的函數,這被稱爲粗粒度變換。