相关疑难解决方法(0)

Spark功能与UDF性能有关?

Spark现在提供可在数据帧中使用的预定义函数,并且它们似乎已经过高度优化.我最初的问题是更快,但我自己做了一些测试,发现至少在一个实例中,spark函数的速度提高了大约10倍.有谁知道为什么会这样,什么时候udf会更快(仅适用于存在相同spark函数的情况)?

这是我的测试代码(在Databricks社区上运行):

# UDF vs Spark function
from faker import Factory
from pyspark.sql.functions import lit, concat
fake = Factory.create()
fake.seed(4321)

# Each entry consists of last_name, first_name, ssn, job, and age (at least 1)
from pyspark.sql import Row
def fake_entry():
  name = fake.name().split()
  return (name[1], name[0], fake.ssn(), fake.job(), abs(2016 - fake.date_time().year) + 1)

# Create a helper function to call a function repeatedly
def repeat(times, func, *args, **kwargs):
    for _ in xrange(times):
        yield func(*args, **kwargs)
data = list(repeat(500000, fake_entry))
print …
Run Code Online (Sandbox Code Playgroud)

performance user-defined-functions apache-spark apache-spark-sql pyspark

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

Pyspark将结构数组转换为字符串

我在 Pyspark 中有以下数据框

+----+-------+-----+                                                            
|name|subject|score|
+----+-------+-----+
| Tom|   math|   90|
| Tom|physics|   70|
| Amy|   math|   95|
+----+-------+-----+
Run Code Online (Sandbox Code Playgroud)

我使用collect_liststructpyspark.sql.functions

df.groupBy('name').agg(collect_list(struct('subject', 'score')).alias('score_list'))
Run Code Online (Sandbox Code Playgroud)

获取以下数据框

+----+--------------------+
|name|          score_list|
+----+--------------------+
| Tom|[[math, 90], [phy...|
| Amy|        [[math, 95]]|
+----+--------------------+
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将最后一列score_list转换为字符串并将其转储到 csv 文件中,如下所示

Tom     (math, 90) | (physics, 70)
Amy     (math, 95)
Run Code Online (Sandbox Code Playgroud)

感谢任何帮助,谢谢。

更新:是一个类似的问题,但并不完全相同,因为它直接从string另一个string. 就我而言,我想首先转移stringcollect_list<struct>并最终将其字符串化collect_list<struct>

python apache-spark-sql pyspark

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