簡體   English   中英

火花| pyspark與fbprophet-並行處理不適用於rdd.map

[英]Spark | pyspark with fbprophet - parallel processing not working with rdd.map

我正在嘗試使用pyspark實現fbprophet,但是無法在所有可用內核上並行化代碼(在我的計算機上本地運行)。

我已經搜索了許多文章,試圖了解為什么會這樣。

在下面,您可以找到應該進行並行化的代碼塊。 我已經定義了所有映射函數

if __name__ == '__main__':

conf = (SparkConf()
        .setMaster("local[*]")
        .setAppName("SparkFBProphet Example"))

spark = (SparkSession
         .builder
         .config(conf=conf)
         .getOrCreate())

# Removes some of the logging after session creation so we can still see output
# Doesnt remove logs before/during session creation
# To edit more logging you will need to set in log4j.properties on cluster
sc = spark.sparkContext
sc.setLogLevel("ERROR")

# Retrieve data from local csv datastore
print(compiling_pickle())
df = retrieve_data()

# Group data by app and metric_type to aggregate data for each app-metric combo
df = df.groupBy('column1', 'column2')
df = df.agg(collect_list(struct('ds', 'y')).alias('data'))


df = (df.rdd
      .map(lambda r: transform_data(r))
      .map(lambda d: partition_data(d))
      .map(lambda d: create_model(d))
      .map(lambda d: train_model(d))
      .map(lambda d: make_forecast(d))
      .map(lambda d: imp_predictions(d))
      .saveAsTextFile("../data_spark_t/results"))

spark.stop()

在這個部分:

print(compiling_pickle())
df = retrieve_data()

加載,編譯泡菜並生成csv。 使用檢索功能,我只能這樣做:

df = (spark.read.option("header", "true")
      .option("inferSchema", value=True)
      .csv("../data_spark_t/database_created.csv"))

因此,盡管如此,我仍無法理解為什么我的代碼沒有在執行過程中附加所有可用的內核。

只是指出一些已經測試過的要點:

  • 我的分區號是500。我已經將其設置為等於df中的行數(在“ collect_list”之后),但是沒有用;

  • setMaster()的所有可能組合已實現;

有人可以幫忙嗎?

問題解決了:

schema = StructType([
    StructField("column 1", StringType(), True),
    StructField("column 2", StringType(), True),
    StructField("column 3", TimestampType(), True),
    StructField("yhat", FloatType(), True),
    StructField("yhat_lower", FloatType(), True),
    StructField("yhat_upper", FloatType(), True),
])

df = spark.createDataFrame(df, schema)
df.write.options(header=True).csv(
    'dbfs:/mnt/location/output_teste_1', mode='overwrite')

只需要使用上述結構進行保存即可。

在Azure數據塊上實現了這一點,代碼成功完成了所有啟動的可用節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM