Skip to content

Commit 5b7da6a

Browse files
committed
[Feature][Transform][python] add data on thread
1 parent 7fdd31d commit 5b7da6a

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

Diff for: seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/python/PythonOperationProxy.java

+18
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@
1717

1818
package org.apache.seatunnel.transform.python;
1919

20+
import org.apache.seatunnel.api.table.type.SeaTunnelRowAccessor;
2021
import py4j.GatewayServer;
2122

23+
import java.util.Map;
24+
import java.util.concurrent.ConcurrentHashMap;
25+
2226
public class PythonOperationProxy implements RowOperation {
2327

2428
private GatewayServer javaServer;
29+
private final Map<Long,SeaTunnelRowAccessor> threadDataMap = new ConcurrentHashMap<>();
30+
private final Map<Long,Long> threadDataOffsetMap = new ConcurrentHashMap<>();
2531
private PythonOperationProxy(){
2632
if (INSTANCE != null) {
2733
throw new RuntimeException("Please use newInstance() method for getting the single instance of this class.");
@@ -43,4 +49,16 @@ public static PythonOperationProxy newInstance(Integer javaServerPort) {
4349
public void shutdown(){
4450
this.javaServer.shutdown();
4551
}
52+
53+
public void putThreadData(long threadId, SeaTunnelRowAccessor inputRow) {
54+
this.threadDataMap.put(threadId,inputRow);
55+
this.threadDataOffsetMap.compute(threadId,(thread,offset) ->{
56+
if (offset == null){
57+
offset = 0L;
58+
}else {
59+
offset = offset + 1;
60+
}
61+
return offset;
62+
});
63+
}
4664
}

Diff for: seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/python/PythonTransform.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ public class PythonTransform extends MultipleFieldOutputTransform {
1111

1212
public static final String PLUGIN_NAME = "Python";
1313

14-
private final PythonTransformConfig config;
14+
private final PythonTransformConfig transformConfig;
1515

1616
private final PythonOperationProxy pythonOperationProxy;
1717

1818
public PythonTransform(@NonNull CatalogTable inputCatalogTable, PythonTransformConfig transformConfig) {
1919
super(inputCatalogTable, transformConfig.getErrorHandleWay());
20-
this.config = transformConfig;
21-
pythonOperationProxy = initLocalSingletonJavaServer(config.getJavaServerPort());
20+
this.transformConfig = transformConfig;
21+
this.pythonOperationProxy = initLocalSingletonJavaServer(transformConfig.getJavaServerPort());
2222
}
2323

2424
private PythonOperationProxy initLocalSingletonJavaServer(Integer javaServerPort) {
@@ -32,6 +32,8 @@ public String getPluginName() {
3232

3333
@Override
3434
protected Object[] getOutputFieldValues(SeaTunnelRowAccessor inputRow) {
35+
long threadId = Thread.currentThread().getId();
36+
pythonOperationProxy.putThreadData(threadId,inputRow);
3537
return new Object[0];
3638
}
3739

0 commit comments

Comments
 (0)