火花|带有fbprophet的pyspark-并行处理不适用于rdd.map

时间:2018-11-28 12:30:01

标签: python-3.x pyspark rdd facebook-prophet

我正在尝试用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()的所有可能组合已实现;

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

问题已解决:

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数据块上实现了此功能,代码成功完成了所有启动的可用节点。