Azure Data Factory映射数据流读取UTF16LE逐行JSON如何设置lineSep
故障原因
Azure 数据工厂映射数据流读取UTF-16LE编码的「每行一个文档」格式JSON文件时,底层调用Spark SQL的JSON解析组件,该组件对UTF-16这类多字节编码不会自动推断行分隔符,必须显式指定lineSep参数;但Azure门户的可视化配置界面未将该参数暴露为独立配置项,因此触发参数缺失报错。
报错核心栈信息如下:
{"StatusCode":"DFExecutorUserError","Message":"Job failed due to reason: at Source 'source1': java.lang.IllegalArgumentException: requirement failed: The lineSep option must be specified for the UTF-16LE encoding","Details":"java.lang.IllegalArgumentException: requirement failed: The lineSep option must be specified for the UTF-16LE encoding\n\tat scala.Predef$.require(Predef.scala:224)\n\tat org.apache.spark.sql.catalyst.json.JSONOptionsInRead.checkedEncoding(JSONOptions.scala:153)\n\tat org.apache.spark.sql.catalyst.json.JSONOptions$$anonfun$34.apply(JSONOptions.scala:109)\n\tat org.apache.spark.sql.catalyst.json.JSONOptions$$anonfun$34.apply(JSONOptions.scala:109)\n\tat scala.Option.map(Option.scala:146)\n\tat org.apache.spark.sql.catalyst.json.JSONOptions.<init>(JSONOptions.scala:109)\n\tat org.apache.spark.sql.catalyst.json.JSONOptionsInRead.<init>(JSONOptions.scala:133)\n\tat org.apache.spark.sql.catalyst.json.JSONOptionsInRead.<init>(JSONOptions.scala:139)\n\tat org.apache.spark.sql.execution.datasources.json.JsonFileFormat.inferSchema(JsonFileFormat.scala:55)\n\tat org.apache.spark.sql.execution.datasources.DataSource$$anonfun$6.apply(DataSource.scala:193)\n\tat org.apache.spark.sql.execution.datasources.DataSource$$anonfun$6.apply(DataSource."}
配置步骤
- 打开报错的
source1源转换配置页,确认文件格式选JSON、解析模式设为「每行一个文档」、编码指定为UTF-16LE - 切换到「源选项」标签,找到Spark自定义选项(部分版本显示为「附加读取选项」)的键值对配置区,所有可视化界面未暴露的底层Spark读取参数都可以通过该区域透传
- 新增一行配置:
- 键:
lineSep - 值:按文件实际使用的换行符填写,常见取值如下:
- Windows系统生成的CRLF换行文件填
\r\n - Linux/Unix系统生成的LF换行文件填
\n - 老式Mac系统生成的CR换行文件填
\r
- Windows系统生成的CRLF换行文件填
- 键:
- 配置完成后先点击「数据预览」验证,能正常解析出字段和数据就说明参数生效,可直接运行流水线作业。
如果是通过ARM模板、Terraform等基础设施即代码方式部署数据流,直接在源转换的附加配置节点中加入上述lineSep键值对即可,无需修改其他业务逻辑。
内容的提问来源于stack exchange,提问作者ebclark
相关产品推荐
相关产品推荐

