【发布时间】:2016-12-30 22:16:04
【问题描述】:
在我的应用程序中,我从 S3 上不同位置的数据创建不同的数据帧,然后尝试将数据帧合并为单个数据帧。现在我正在为此使用 for 循环。但我觉得这可以通过使用 pyspark 中的 map 和 reduce 函数以更有效的方式完成。这是我的代码:
from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext, GroupedData
import pandas as pd
from datetime import datetime
sparkConf = SparkConf().setAppName('myTestApp')
sc = SparkContext(conf=sparkConf)
sqlContext = SQLContext(sc)
filepath = 's3n://my-s3-bucket/report_date='
date_from = pd.to_datetime('2016-08-01',format='%Y-%m-%d')
date_to = pd.to_datetime('2016-08-22',format='%Y-%m-%d')
datelist = pd.date_range(date_from, date_to)
First = True
#THIS is the for-loop I want to get rid of
for dt in datelist:
date_string = datetime.strftime(dt, '%Y-%m-%d')
print('Running the pyspark - Data read for the date - '+date_string)
df = sqlContext.read.format("com.databricks.spark.csv").options(header = "false", inferschema = "true", delimiter = "\t").load(filepath + date_string + '/*.gz')
if First:
First=False
df_Full = df
else:
df_Full = df_Full.unionAll(df)
【问题讨论】:
-
您对使用 Spark 有限制吗?如果没有,您是否考虑过使用 dask 代替? dask 的设计包括其他好东西,可以轻松实现您想要做的事情
-
我需要使用 spark,因为之后我将在其中运行 Spark 算法。而且数据量也很大。
标签: python apache-spark pyspark