这可能是一个非常基本的问题,但是我对pyspark和zeppelin还是陌生的。
我正在使用pyspark上下文从齐柏林飞艇中的s3
中读取镶木地板,然后在其上运行聚合。
mydf.show()
和mydf.count()
在从s3
导入的原始数据上可以正常运行(在5分钟内运行),但是在我对数据帧进行汇总,过滤或运行任何其他操作后,它们非常缓慢(需要一个多小时)。
有人可以请问这是为什么发生的,我该怎么做才能使它们更快地运行?
我已经尝试了不同的聚合方式,例如使用spark.sql
,groupBy.agg
,但似乎没有任何改变。另外,我还通过删除/删除所有临时文件和数据帧来释放了群集上的空间。
%spark2.pyspark
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark import SparkConf
from pyspark.sql import SparkSession
import pandas as pd
sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)
df = sqlContext.read.parquet("path.parquet")
from pyspark.sql.types import DateType
df = df.withColumn("datet",df['timestamp'].cast(DateType()))
df = df[["keeping required columns"]]
df.show() #working fine
from pyspark.sql import SQLContext
df.createOrReplaceTempView("dftempview")
df1 = spark.sql("select _col1, sum(_col2) _col2, count(*) _col3 from dftempview where _col1 is not null or _col1 != '' group by _col1")
spark.catalog.dropTempView("dftempview")
df1.show() #taking more than an hour to show dataframe
#Also tried
df1 = df.groupBy("_col1").agg(sum("_col2").alias("_col2"))
df1.show() #taking same time
我也尝试过在sql上下文中创建临时视图并运行select count(*), sum(_col2) from mydftempview
,但这也无法正常工作。