我有一个Apache NIFI作业,我使用getFile
从系统中获取文件,然后使用putHDFS
,将文件放入hadoop之后如何在HDFS中重命名文件?
我尝试使用executeScript
处理器,但无法正常工作
flowFile = session.get()
if flowFile != None:
tempFileName= flowFile.getAttribute("filename")
fileName=tempFileName.replace('._COPYING_','')
flowFile = session.putAttribute(flowFile, 'filename', fileName)
session.transfer(flowFile, REL_SUCCESS)
答案 0 :(得分:2)
Shu的以上回答对于如何在NiFi中处理文件名属性是正确的,但是如果您已经将文件写入HDFS,然后使用UpdateAttribute,则它不会更改HDFS中的文件名,只会更改NiFi中的filename属性的值。
您可以使用UpdateAttribute方法创建一个名为“ final.filename”的新属性,然后使用MoveHDFS将原始文件移至最终文件。
还要注意,PutHDFS处理器已经写入了一个临时文件并将其移至最终文件,因此我不确定是否需要命名为“。 COPYING ”。例如,如果将流文件发送到文件名为“ foo”的PutHDFS,它将首先将“ .foo”写入目录,完成后会将其移动到“ foo”。
唯一需要使用MoveHDFS的情况是,如果其他进程正在监视目录并且不能忽略点文件,则将其写入其他位置,并在完成后使用MoveHDFS。
答案 1 :(得分:0)
代替使用 ExecuteScript 处理器(额外的开销),使用 UpdateAttribute 处理器从PutHDFS馈送成功关系
在UpdateAttribute处理器中将新属性添加为
文件名
import * as React from 'react';
import { Alert, TouchableOpacity, Text, View, StyleSheet } from 'react-native';
import { Constants } from 'expo';
export default class App extends React.Component {
_onPressButton (n) {
Alert.alert('You tapped the button number ' + n);
}
_renderBlockLebel = number => {
var items = [];
for (var i = 0; i < number; i++) {
const n = i;
items.push(
<TouchableOpacity onPress={() => this._onPressButton(n)} key={i}>
<View style={styles.boxItem}>
<Text>Level {i}</Text>
</View>
</TouchableOpacity>
);
}
return items;
};
render() {
return (
<View style={styles.container}>
<View style={styles.box}>{this._renderBlockLebel(18)}</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
paddingTop: Constants.statusBarHeight,
backgroundColor: '#ecf0f1',
},
});
使用NiFi表达式语言中的replaceAll功能。
(或)
使用replace函数
文件名
${filename:replaceAll('<regex_expression>','<replacement_value>')}
NiFi表达式语言提供了不同的功能来操纵字符串,有关更多与表达式语言有关的文档,请参考this链接。
我曾尝试使用与 ExecuteScript 处理器和 Script Engine as Python 相同的确切脚本,并且一切正常。
使用${filename:replaceAll('<search_string>','<replacement_value>')}
函数并替换为.replace
输出:
文件名''
更改为fn._COPYING_
。