我有一个DataFrame(DF_Testing),其中包含以下示例数据:

DataFrame(Before)

我需要从Amount列中获取最大值.因此,输出DataFrame(Dfnew)如下所示:

DataFrame(After)

我还是一名初学者,所以我使用以下代码遍历了数据帧:

    import numpy as np
    import pandas as pd

    rec_count = df_testing.count()
    MaxValuesArray = [] #empty array
    TransactionArray = [] #empty array

    for i in range(0, rec_count):
        vMaxValue = max(df_testing.cache().collect()[i]["Amount"].split(","))
        vTransactionId = df_testing.cache().collect()[i]["Id"]
        TransactionArray.append(vTransactionId)
        MaxValuesArray.append(vMaxValue)

    X = np.array([TransactionArray,MaxValuesArray])
    Y = {'Id':X[0], 'MaxValue':X[1]}

    df = pd.DataFrame(Y) #convert array to panda dataframe
    SparkDF = spark.createDataFrame(df) #convert to spark dataframe
    a=df_testing.alias("a")
    b=SparkDF.alias("b")
    dfnew = a.join(b,a.Id ==  b.Id,"inner").select('a.*','b.MaxValue') #join dataframes
    dfnew.show(truncate=False)

虽然上面的代码可以工作,但它的效率非常低.该样本有3条记录,但每天我需要处理大约25000条记录.循环(附在小spark 盘上)25000条记录需要2个多小时.

我的理解是,Pyspark DataFrame非常强大,但我只是不具备作为DataSet的一部分获得最大值的专业知识,而不是遍历DataFrame.

任何帮助都将不胜感激.

推荐答案

Setup

df.show()

+-----------+
|     Amount|
+-----------+
|100,200,300|
|200,400,100|
|  1000,2500|
|  100.1,1,2|
|        100|
+-----------+

Solution

将Amount列中的字符串拆分到,左右,然后将字符串数组转换为浮点数数组,并使用array_max函数找出最大值

from pyspark.sql import functions as F

df = df.withColumn('max', F.array_max(F.split('Amount', ',').cast('array<float>')))

Result

df.show()
+-----------+------+
|     Amount|   max|
+-----------+------+
|100,200,300| 300.0|
|200,400,100| 400.0|
|  1000,2500|2500.0|
|  100.1,1,2| 100.1|
|        100| 100.0|
+-----------+------+

Python相关问答推荐

如何在Pandas 中存储二进制数?

Pandas滚动分钟,来自其他列的相应值

如何从格式为note:{neighbor:weight}的字典中构建networkx图?

将numpy矩阵映射到字符串矩阵

更改Seaborn条形图中的x轴日期时间限制

如何使用没有Selenium的Python在百思买着陆页面上处理国家/地区 Select ?

Odoo -无法比较使用@api.depends设置计算字段的日期

根据给定日期的状态过滤查询集

韦尔福德方差与Numpy方差不同

Matlab中是否有Python的f-字符串等效物

. str.替换pandas.series的方法未按预期工作

Vectorize多个头寸的止盈/止盈回溯测试pythonpandas

如何记录脚本输出

更改键盘按钮进入'

如何获取numpy数组的特定索引值?

Python+线程\TrocessPoolExecutor

如果满足某些条件,则用另一个数据帧列中的值填充空数据帧或数组

多指标不同顺序串联大Pandas 模型

使用Python和文件进行模糊输出

在numpy数组中寻找楼梯状 struct