You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将变量传入Spark DataFrame.selectExpr并正确执行stack行列转换

问题根因

你生成的finExp字符串存在两处拼接错误:

  • 额外拼接了多余的外围双引号、无意义的s字符,从报错的SQL片段可以看到,表达式整体被双引号包裹,Spark解析时会把引号识别为语法的一部分,触发语法错误。你手动复制输出内容时会自动忽略外围的引号,所以直接粘贴可以正常运行。
  • 循环拼接srchExp时字符串中间夹带了换行符,也会干扰SQL解析。

解决方法

简化字符串拼接逻辑,直接生成符合要求的SQL表达式即可,修正后的代码如下:

// 批量生成stack函数需要的参数,避免循环拼接的冗余逻辑
val srchExp = (1 to 15).map { i =>
  s"'License Number $i',`Provider License Number_$i`,'Provider License Number State Code_$i',`Provider License Number State Code_$i`"
}.mkString(",")

// 拼接最终的SELECT表达式,无需额外加引号
val finExp = s"NPI, stack(15, $srchExp) as (License,LicNumber,Code,State)"

// 直接传入参数即可运行
val retDF = npiDF.selectExpr(finExp)
retDF

内容的提问来源于stack exchange,提问作者Hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:54:05