pyspark Pandas的等价物也能在体育公园使用?

icomxhvb  于 2022-12-17  发布在  Spark
关注(0)|答案(2)|浏览(120)

我真的希望能够在spark Dataframe 的整个列上运行复杂的函数,就像我在Pandas中使用apply函数所做的那样。
例如,在Pandas中,我有一个apply函数,它接受像www.example.com这样混乱的域sub-subdomain.subdomain.facebook.co.nz/somequerystring,只输出facebook.com。
在Spark我该怎么做?
我已经看过UDF,但我不清楚如何在单个列上运行它。
假设我有一个简单的函数,如下所示,我从PandasDF列中提取日期的不同部分:

def format_date(row):
    year = int(row['Contract_Renewal'][7:])
    month = int(row['Contract_Renewal'][4:6])
    day = int(row['Contract_Renewal'][:3])
    date = datetime.date(year, month, day)
    return date-now

在《Pandas》中我会这样称呼它:

df['days_until'] = df.apply(format_date, axis=1)

我能在Pyspark中实现同样的目标吗?

qxgroojn

qxgroojn1#

在这种情况下,您可以使用regexp_extract(http:API?突出显示=子字符串#pyspark.sql.functions.regexp_extract)、regexp_replace(http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?突出显示=子字符串#pyspark.sql.functions.regexp_replace)和split(http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?突出显示=子字符串#pyspark.sql.functions.split)的某种组合来重新格式化字符串的日期。
它不像定义自己的函数和使用像Pandas那样的apply那样干净,但它应该比定义Pandas/Spark UDF更有性能。
祝你好运!

xzlaal3s

xzlaal3s2#

最新版本的PySpark提供了一种利用panda来运行apply()函数的方法。

# Imports
import pyspark.pandas as ps
import numpy as np

technologies = ({
    'Fee' :[20000,25000,30000,22000,np.NaN],
    'Discount':[1000,2500,1500,1200,3000]
               })
# Create a DataFrame
psdf = ps.DataFrame(technologies)
print(psdf)

def add(row):
   return row[0]+row[1]
   
addDF = psdf.apply(add,axis=1)
print(addDF)

相关问题