我真的希望能够在 spark 数据帧的整个列上运行复杂的函数,就像我在 Pandas 中使用应用函数所做的那样。
例如,在 Pandas 中,我有一个应用函数,它接受一个像 sub-subdomain.subdomain.facebook.co.nz/somequerystring 这样的杂乱域,并且只输出 facebook.com。
我将如何在 Spark 中执行此操作?
我看过 UDF,但我不清楚如何在单个列上运行它。
假设我有一个如下所示的简单函数,我从 pandas DF 的列中提取日期的不同位:
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 中实现相同的目标吗?
最佳答案
在这种情况下,您可以使用 regexp_extract
( http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=substring#pyspark.sql.functions.regexp_extract )、regexp_replace
( http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=substring#pyspark.sql.functions.regexp_replace ) 和 split
( http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=substring#pyspark.sql.functions.split ) 重新格式化字符串的日期。
它不像定义您自己的函数和像 Pandas 那样使用 apply
那样干净,但它应该比定义 Pandas/Spark UDF 更高效。
祝你好运!
关于apache-spark - Pandas 的等价物适用于pyspark吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61034251/
相关文章:
java - 如何使用 lsp-java 在 emacs 上打开一个 maven 项目?
python - 为什么我得到 "NameError: global name ' open' is
amazon-web-services - 在 AWS 用户名和非 identity_id 下的 S
laravel - 在 laravel-passport-social-grant 包上获取 inv
javascript - 使用 Javascript 在带有自定义磁贴的新浏览器选项卡中打开 PDF
xamarin.forms - System.Net.WebException : Error: T
entity-framework - System.Data.Entity 不可用