在使用Marklogic 8和Marklogic Content Pump进行一些实验后,我遇到了将数据导入Marklogic数据库的问题。我试图运行mlcp import
操作来加载来自一组csv文件的数据,输入设置如下:
-input_file_path content/csv/
-input_file_pattern ".*\.csv"
-input_file_type delimited_text
此外,我尝试了一些其他设置来根据我的需要自定义导入。我尝试过的一个设置是-transform_module
设置,可以在加载过程中应用基于javascript的自定义转换模块进行一些额外的转换,如下所示:
-transform_module /transform/customTransform.sjs
当我使用这些设置运行mlcp import命令时,mlcp正确加载文档,并按预期执行转换。
我尝试的另一个设置是-filename_as_collection
设置,用于为每个导入的文档分配一个集合,其中包含文档源自的文件的名称。我运行了一些测试并验证了使用此设置正确分配了集合。
因此,-transform_module
和-filename_as_collection
设置分别按预期工作,但当我尝试在一个导入操作中同时应用这两个设置时会出现问题。我在命令窗口中收到以下错误消息:
15/03/25 11:01:51 ERROR contentpump.MultithreadedMapper:com.marklogic.contentpump.ContentWithFileNameWritable无法强制转换为org.apache.hadoop.io.Text
java.lang.ClassCastException:com.marklogic.contentpump.ContentWithFileNameWritable无法强制转换为org.apache.hadoop.io.Text
在com.marklogic.contentpump.utilities.TransformHelper.getTransformInsertQry(TransformHelper.java:163)
在com.marklogic.contentpump.TransformWriter.write(TransformWriter.java:97)
在com.marklogic.contentpump.TransformWriter.write(TransformWriter.java:46)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:85)
在org.apache.hadoop.mapreduce.lib.map.WrappedMapper $ Context.write(WrappedMapper.java:106)
在com.marklogic.contentpump.DocumentMapper.map(DocumentMapper.java:46)
在com.marklogic.contentpump.DocumentMapper.map(DocumentMapper.java:32)
在com.marklogic.contentpump.BaseMapper.runThreadSafe(BaseMapper.java:51)
在com.marklogic.contentpump.MultithreadedMapper $ MapRunner.run(MultithreadedMapper.java:376)
at java.util.concurrent.Executors $ RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)
在java.lang.Thread.run(未知来源)
这是我执行的完整命令:
mlcp import -input_file_path content/csv/ -input_file_pattern ".*\.csv" -input_file_type delimited_text -delimiter ";" -delimited_root_name rootname -namespace http://marklogic.com/somenamespace -transform_module /transform/customTransform.sjs -filename_as_collection
我在一台Windows 8.1计算机上运行Marklogic 8.0-1.1开发人员版和mlcp 1.3-1。