Apache spark 如何在使用Spark会话写入数据之前,在启用会话集命令的情况下将数据帧结果写入teradata
我的数据具有特殊字符(如笑脸字符、一些垃圾字符)。我想按原样将数据插入到Terdata表中。我可以看到Hive以UTF-8格式存储数据。其中teradata spark数据帧写入失败并出现错误 错误6705翻译过程中遇到非法格式的字符串 为了解决这个问题,我遵循了以下流程Apache spark 如何在使用Spark会话写入数据之前,在启用会话集命令的情况下将数据帧结果写入teradata,apache-spark,apache-spark-sql,teradata,pyspark-dataframes,Apache Spark,Apache Spark Sql,Teradata,Pyspark Dataframes,我的数据具有特殊字符(如笑脸字符、一些垃圾字符)。我想按原样将数据插入到Terdata表中。我可以看到Hive以UTF-8格式存储数据。其中teradata spark数据帧写入失败并出现错误 错误6705翻译过程中遇到非法格式的字符串 为了解决这个问题,我遵循了以下流程 使用DriverManager和ConnectionCreateStatement编写自定义Scala代码 JDBC ConnectionString=JDBC:teradata://connection/DATABASE=d
请提供您对此的想法。谢谢您可以指定Teradata JDBC驱动程序的
RUNSTARTUP=on
连接参数,并在数据库用户的STARTUP
子句中指定SET SESSION CHARACTER SET UNICODE PASS-THROUGH on
命令
有关详细信息,请参阅Teradata JDBC驱动程序用户指南中标题为“用户启动SQL请求”的部分:
如果目标表中的相应列未使用适当的字符集定义,则会话选项对您没有任何好处。为什么要将您描述的内容存储为垃圾字符?我认为在Pyspark中,您可以对数据帧进行ansi编码并去除垃圾。感谢@Andrew的回复-我的表列已在UNICODE字符集中,但作业仍然失败,这里是垃圾字符,例如-标准键盘中没有的字符,例如-Register Symbol®和与普通引号(')不同的单引号(')。我们需要按原样存储和显示给最终用户,而不需要跳过任何字符。我可以通过使用自定义Terdata插入而不是通过Pyspark来实现这一点。我不应该跳过任何字符。不幸的是,
write
方法当前不支持选项(“sessionInitStatement”、“…”)
正如read
所做的那样。@Fred非常感谢您提供的信息。看起来它已经开放了一年。希望问题很快就会解决。我将进一步监控这个问题,并在看到任何解决方案后在这里更新。谢谢Hanks Tom。通过添加RUNSTARTUP=ON并将会话集命令添加到username中来解决这个问题。我可以看到结果按预期在Teradata表中显示。