问题
我的问题和this one: Spark buffer holder size limit issue一样。
我的代码是这样的:
# Calculate the statistics
stats = df.groupBy("EventType").agg(
size(collect_set("Parameters")).alias("ParameterLength"),
collect_list("Parameters").alias("Parameters"),
(count("*") / df.count() * 100).alias("Frequency"),
)
期望
解决方案一
我已经知道大部分的Parameters
都很短,只有EventType
是A
和B
有大量的参数,我想有没有办法跳过EventType
==“A”或“B”第一,并输出一个汇总表,然后输出EventType
==“A”或“B”到一个独立的文件或其他东西。
我想要的是这样的:
EventType ParameterLength Frequency Parameters
TimeChanged 0 0.799471 []
Alarm 40 71.643145 [ele1,ele2,...ele40]
...
A 9999999 12.12 None--> file generated
B 30031 5.21 None--> file generated
方案二
获取溢出列(如“A”和“B”)的前100个参数。或者当元素> 100时,执行切片,否则执行正常操作。
方案三
Parameters
数组包含了所有的{“Key”:XXX,“Value”:YYY}对,有没有办法通过在spark中将它们变成像(XXX,YYY)或StructType
这样的元组来减少大小?
1条答案
按热度按时间vvppvyoh1#
我使用了解决方案2,这是我的代码: