apache-spark - 如何在 PySpark 中编写条件正则表达式替换?
问题描述
我试图让 if else 语句以when()
andotherwise()
函数的形式工作。我尝试了很多方法,但我的问题是when()
声明需要一个专栏。有没有办法让以下代码工作when()
并otherwise()
格式化?
get_data = spark.sql("SELECT STRING({}) AS {} FROM {} WHERE Mobile='{}'".format(dynamic_tag_mapping_column_name, match[0], dynamic_tag_mapping_table_name, mobile_numbers[mob])).collect()[0][0]
if get_data!='0':
textList.append(campaign_segment_text.withColumn('CampaignSMSText', func.expr("regexp_replace(CampaignSMSText, '{}', {})".format(match[0], get_data)))
else:
textList.append(campaign_segment_text.withColumn('CampaignSMSText', func.expr("regexp_replace(CampaignSMSText, '{}', {})".format(match[0], dynamic_default_value)))
我想要实现的是,如果我get_data>0
从数据库中获取值,它将采用该get_data
值,但如果是get_data=0
,它将分配一个设置的默认值。我尝试将 String 值设置为从数据库获取的 Int ,但由于get_data
不是列,因此无法比较。反正有没有让这个工作?
解决方案
试着case when
放进去F.expr
?
get_data = spark.sql("SELECT {} AS {} FROM {} WHERE Mobile='{}'".format(dynamic_tag_mapping_column_name, match[0], dynamic_tag_mapping_table_name, mobile_numbers[mob])).collect()[0][0]
textList.append(
campaign_segment_text.withColumn(
'CampaignSMSText',
func.expr(
"regexp_replace(CampaignSMSText, '{}', case when {} != 0 then {} else {} end)".format(
match[0], get_data, get_data, dynamic_default_value
)
)
)
)
推荐阅读
- angularjs - 如何获取当前位置的基本 URL?
- oracle - Oracle SQL 回收站问题
- android - android studio robolectric 测试无覆盖
- django - 如何限制文件格式导出选项 django-import-export
- ruby - 在线程中调用相同的过程不起作用
- python - 从(嘈杂的)纯色背景中提取单个对象
- javascript - 如何防止在 Vue/Vuetify 应用程序中缩放时调整传单地图的大小
- c++ - 使用 std::generate 的随机 unordered_multimap
- c++ - 使用指针和偏移量遍历结构成员的向量
- python - 如果源代码中不存在任何元素,如何抓取 url ?