この線:
df.withColumn("test", expr("concat(lon, lat)"))
期待どおりに動作しますが
df.withColumn("test", expr("concat(lon, lit(','), lat)"))
次の例外が生成されます。
org.Apache.spark.sql.AnalysisException:未定義の関数: 'lit'。この関数は、データベースの「デフォルト」に登録されている登録済み一時関数でも永続的関数でもありません。; org.Apache.spark.sql.catalyst.analysis.Analyzer $ LookupFunctions $$ anonfun $ apply $ 15 $$ anonfun $ applyOrElse $ 49.apply(Analyzer.scala:1198)の行1の位置12
どうして?そして、回避策は何でしょうか?
expr
への文字列引数は、SQL式として解析され、列の構築に使用されます。 lit
は有効なSQLコマンドではないため、エラーが発生します。 (lit
は、Sparkで使用され、リテラル値を新しい列に変換します。)
これを解決するには、lit
の部分を削除するだけです。
df.withColumn("test", expr("concat(lon, ',', lat)"))
または、組み込みのSpark concat
関数をexpr
なしで直接使用します。
df.withColumn("test", concat($"lon", lit(","), $"lat"))
concat
は引数として列をとるため、ここではlit
を使用する必要があります。