减少火花返回字典而不是数据帧中的操作

     2023-04-15     77

关键词:

【中文标题】减少火花返回字典而不是数据帧中的操作【英文标题】:reduce operation in spark returning dictionary instead dataframe 【发布时间】:2018-04-29 17:25:18 【问题描述】:

我正在编写一个reduce 操作,我期待一个数据框而不是字典。根据下面的代码,它会给出字典

def funReduce(a, b):
    result = 
    # first element
    if type(a) is tuple:
        result = a[1]
    else:
        result = a
    if b is not None:
        for key in list(b[1].keys()):
            if key not in result:
                result[key] = 1
            else:
                result[key] = result[key] + 1
    return result

d = sc.parallelize([(1305670057984, (1000001256903, 1000001120912): 1, (1000001423245, 1000001120913): 1), (1000001256903, (1000001256903, 1000001120912): 1)])

s = d.reduce(funReduce)

我有一个类似于 d 的数据框,一个带有 Transaction id 的元组及其购买的产品(A->B 交易)和 count。所以我现在的目标是创建一个产品数量(A->B)的数据框,通过组合所有交易细节类似于以下内容:

(1000001423245, 1000001120913): 1, (1000001256903, 1000001120912): 2

使用上面的代码,我可以做到,但结果是字典。我需要一个数据框,以便进一步进行。因为如果它被转换为字典,那么在 Spark 中写这个没有意义。

【问题讨论】:

如果您共享数据框的架构、输入数据框示例和预期数据框示例,将会很有帮助 【参考方案1】:

这只是一个字数,所以要么reduceByKey 得到RDD

d.values().flatMap(lambda d: ((x, 1) for x in d.keys())).reduceByKey(lambda x, y: x + y).collect()
# [((1000001423245, 1000001120913), 1), ((1000001256903, 1000001120912), 2)]

explodeagg

from pyspark.sql.functions import explode

spark.createDataFrame(d).select(explode("_2")).groupBy("key").count().show(truncate=False)
# +------------------------------+-----+
# |key                           |count|
# +------------------------------+-----+
# |[1000001423245, 1000001120913]|1    |
# |[1000001256903, 1000001120912]|2    |
# +------------------------------+-----+

获取DataFrame

【讨论】:

而不是 count 你应该做 sum 聚合 ;)

验证输入火花数据帧中的时间戳以生成正确的输出火花数据帧

】验证输入火花数据帧中的时间戳以生成正确的输出火花数据帧【英文标题】:Validatetime_stampininputsparkdataframetogeneratecorrectoutputsparkdataframe【发布时间】:2019-08-1910:11:26【问题描述】:我有一个包含多列的spark数据框。其中之一是... 查看详情

如何处理外部连接的火花数据帧中的数据倾斜

】如何处理外部连接的火花数据帧中的数据倾斜【英文标题】:Howtohandledataskewinthesparkdataframeforouterjoin【发布时间】:2018-03-2611:47:04【问题描述】:我有两个数据框,我正在对5列执行外连接。以下是我的数据集示例。uniqueFundament... 查看详情

将火花数据帧中的日期时间时间戳转换为 epocTimestamp

】将火花数据帧中的日期时间时间戳转换为epocTimestamp【英文标题】:ConvertdatetimetimestampinsparkdataframetoepocTimestamp【发布时间】:2020-12-0415:16:39【问题描述】:我有一个带有时间戳列的镶木地板文件,格式为2020-07-0718:30:14.500000+00:00... 查看详情

为啥预分区会因为减少洗牌而有利于火花工作?

】为啥预分区会因为减少洗牌而有利于火花工作?【英文标题】:Whypre-partitionwillbenefitsparkjobbecauseofreducingshuffling?为什么预分区会因为减少洗牌而有利于火花工作?【发布时间】:2017-08-1004:07:38【问题描述】:许多教程提到RDD的... 查看详情

将字符串格式的科学记数法转换为火花数据帧中的数字[重复]

】将字符串格式的科学记数法转换为火花数据帧中的数字[重复]【英文标题】:convertscientificnotationinstringformattonumericinsparkdataframe[duplicate]【发布时间】:2019-04-3005:58:13【问题描述】:Day_Date,timeofday_desc,Timeofday_hour,Timeofday_minute,Timeo... 查看详情

如何截断火花数据框列的值? [复制]

】如何截断火花数据框列的值?[复制]【英文标题】:Howtotruncatethevaluesofacolumnofasparkdataframe?[duplicate]【发布时间】:2019-06-0319:11:41【问题描述】:我想为spark数据帧的单列中的每个字符串删除字符串的最后两个值。我想在spark数据... 查看详情

限制火花上下文中的记录数量

...rkcontext【发布时间】:2016-03-0815:14:06【问题描述】:我想减少每个reducer的记录数,并将结果变量保留为rdd使用takeSample似乎是显而易见的选择,但是,它返回一个collection而不是SparkContext对象。我想出了这个方法:rdd=rdd.zipWithIndex(... 查看详情

将数据帧中的数据与字典中的数据合并

】将数据帧中的数据与字典中的数据合并【英文标题】:Mergingdatafromadataframewithdatafromadictionary【发布时间】:2021-12-2721:16:51【问题描述】:我有一个字典,键是日期时间,值是那天的数据帧,如下所示:dict=dt.datetime(2021,11,1):pd.Da... 查看详情

python字典操作函数

...n中唯一内建的映射类型,基本的操作包括如下:(1)len():返回字典中键—值对的数量;(2)d[k]:返回关键字对于的值;(3)d[k]=v:将值关联到键值k上;(4)deld[k]:删除键值为k的项;(5)keyind:键值key是否在d中,是返回True,否则返回False。(6)... 查看详情

从火花数据帧中读取结构[重复]

】从火花数据帧中读取结构[重复]【英文标题】:ReadingStructsfromasparkdataframe[duplicate]【发布时间】:2017-02-2812:41:07【问题描述】:我从sparkDataFrame中读取了这一行:scala>valt=df.take(99)scala>t(0)(0)res69:Any=[2,null,WrappedArray([20789823,null,... 查看详情

Kmeans 聚类与火花中的地图减少

】Kmeans聚类与火花中的地图减少【英文标题】:Kmeansclusteringwithmapreduceinspark【发布时间】:2022-01-1521:22:10【问题描述】:您好,有人可以帮助我使用Spark使用Kmeans进行mapreduce。实际上可以用火花做Kmeans,但我不知道如何映射和减... 查看详情

iOS 中的 Alamofire 正在接收字典而不是数组

】iOS中的Alamofire正在接收字典而不是数组【英文标题】:AlamofireiniOSisReceivingDictionaryInsteadofArray【发布时间】:2019-07-2517:40:24【问题描述】:我正在iOS中创建表,并且应该以JSON数组的形式接收所需的数据。但是,当我在我的iOS应... 查看详情

NSArray 返回字符串而不是字典

】NSArray返回字符串而不是字典【英文标题】:NSArrayReturningStringInsteadofDictionary【发布时间】:2013-09-1308:48:50【问题描述】:我已经设置了日志并检查了代码,并且NSArray作为字符串而不是字典返回。问题是我不确定如何将这个特... 查看详情

为啥 ArgumentParser 返回命名空间而不是字典? [关闭]

】为啥ArgumentParser返回命名空间而不是字典?[关闭]【英文标题】:WhydoesArgumentParserreturnanamespaceinsteadofadictionary?[closed]为什么ArgumentParser返回命名空间而不是字典?[关闭]【发布时间】:2018-08-1521:13:17【问题描述】:是什么让命名... 查看详情

Python - re.sub 返回模式而不是替换

】Python-re.sub返回模式而不是替换【英文标题】:Python-re.subreturnpatternratherthanreplacing【发布时间】:2020-08-0305:19:23【问题描述】:我正在尝试修改Python3中的字典键列表,以便它们可以通过字典中的第一组数字来识别,但它似乎返... 查看详情

火花从数据框中收集为 Array[T] 而不是 Array[Row]

】火花从数据框中收集为Array[T]而不是Array[Row]【英文标题】:sparkcollectasArray[T]andnotasArray[Row]fromdataframe【发布时间】:2016-11-2220:57:36【问题描述】:我可以使用RDDAPI收集这样的列。df.map(r=>r.getAs[String]("column")).collect但是,由于... 查看详情

使用石墨烯在 Graphql 中返回字典而不是字符串

】使用石墨烯在Graphql中返回字典而不是字符串【英文标题】:ReturndictionaryinstedofstringinGraphqlusinggraphene【发布时间】:2020-03-2318:20:52【问题描述】:我希望我的graphql查询以字典的形式返回多个值,但我只能在字符串中返回字典。... 查看详情

Python Json加载()返回字符串而不是字典?

】PythonJson加载()返回字符串而不是字典?【英文标题】:PythonJsonloads()returningstringinsteadofdictionary?【发布时间】:2014-10-2603:19:49【问题描述】:我正在尝试使用Python3的内置JSON模块进行一些简单的JSON解析,并且通过阅读有关SO... 查看详情