相关疑难解决方法(0)

DataFrame/Dataset groupBy行为/优化

假设我们有DataFrame,df包含以下列:

名称,姓氏,大小,宽度,长度,重量

现在我们想要执行几个操作,例如我们想要创建一些包含Size和Width数据的DataFrame.

val df1 = df.groupBy("surname").agg( sum("size") )
val df2 = df.groupBy("surname").agg( sum("width") )
Run Code Online (Sandbox Code Playgroud)

正如您所注意到的,其他列(如Length)不会在任何地方使用.Spark是否足够聪明,可以在洗牌阶段之前丢弃多余的列,还是随身携带?威尔跑:

val dfBasic = df.select("surname", "size", "width")
Run Code Online (Sandbox Code Playgroud)

在分组之前以某种方式影响性能?

performance dataframe apache-spark apache-spark-sql apache-spark-dataset

28
推荐指数
1
解决办法
1万
查看次数

对spark数据帧的同一列进行多次聚合操作

我有三个字符串类型的数组包含以下信息:

  • groupBy数组:包含我想要对数据进行分组的列的名称.
  • aggregate array:包含我想要聚合的列的名称.
  • operations array:包含我想要执行的聚合操作

我正在尝试使用spark数据帧来实现这一目标.Spark数据框提供了agg(),您可以在其中传递Map [String,String](列名和相应的聚合操作)作为输入,但是我想对数据的同一列执行不同的聚合操作.有关如何实现这一目标的任何建议?

dataframe apache-spark apache-spark-sql

28
推荐指数
3
解决办法
2万
查看次数

将相同的函数应用于spark数据帧行的所有字段

我有数据框,其中我有大约1000(可变)列.

我想让所有值都大写.

这是我想到的方法,你能否说一下这是最好的方法.

  • 拿排
  • 在数组中查找模式并存储,并查找有多少字段.
  • 映射数据框中的每一行,并最多限制数组中元素的数量
  • 将函数应用于大写每个字段并返回行

apache-spark apache-spark-sql

8
推荐指数
1
解决办法
1万
查看次数

Pyspark - 多列上的聚合

我有如下数据.文件名:babynames.csv.

year    name    percent     sex
1880    John    0.081541    boy
1880    William 0.080511    boy
1880    James   0.050057    boy
Run Code Online (Sandbox Code Playgroud)

我需要根据年份和性别对输入进行排序,我希望输出汇总如下(此输出将分配给新的RDD).

year    sex   avg(percentage)   count(rows)
1880    boy   0.070703         3
Run Code Online (Sandbox Code Playgroud)

我不确定如何在pyspark中执行以下步骤.需要你的帮助

testrdd = sc.textFile("babynames.csv");
rows = testrdd.map(lambda y:y.split(',')).filter(lambda x:"year" not in x[0])
aggregatedoutput = ????
Run Code Online (Sandbox Code Playgroud)

python python-2.7 apache-spark pyspark

8
推荐指数
1
解决办法
3万
查看次数

pyspark计算一行中所有列的平均值

我想计算每列的平均值而不指定所有列名称。

例如,不要这样做:

res = df.select([mean('col1'), mean('col2')])
Run Code Online (Sandbox Code Playgroud)

我想做一些相当于:

res = df.select([mean('*')])
Run Code Online (Sandbox Code Playgroud)

那可能吗?

mean python-3.x pyspark

8
推荐指数
2
解决办法
1万
查看次数

Pyspark - 一次聚合数据帧的所有列

我想将数据框分组到单个列上,然后对所有列应用聚合函数。

例如,我有一个包含 10 列的 df。我希望对第一列“1”进行分组,然后对所有剩余列(均为数字)应用聚合函数“sum”。

与此等效的 R 是 summarise_all。前在R。

df = df%>%group_by(column_one)%>%summarise_all(funs(sum))

Run Code Online (Sandbox Code Playgroud)

我不想在 pyspark 的聚合命令中手动输入列,因为数据框中的列数是动态的。

r aggregate-functions apache-spark pyspark

4
推荐指数
1
解决办法
2万
查看次数

如何在Spark中一次对多个列进行聚合

我有一个包含多列的数据框.我希望按其中一个列进行分组,并将其他列聚合一次.假设该表有4列,cust_id,f1,f2,f3,我想通过cust_id进行分组,然后获得avg(f1),avg(f2)和avg(f3).该表将包含许多列.任何提示?

下面的代码是一个好的开始,但由于我有很多列,手动编写它们可能不是一个好主意.

df.groupBy("cust_id").agg(sum("f1"), sum("f2"), sum("f3"))
Run Code Online (Sandbox Code Playgroud)

scala apache-spark

3
推荐指数
1
解决办法
6897
查看次数