├── src └── main │ ├── resources │ └── schema.json │ └── java │ └── com │ └── harland │ └── example │ ├── common │ ├── utils │ │ ├── MathUtils.java │ │ └── JsonSchemaReader.java │ ├── model │ │ └── TransferRecord.java │ ├── transform │ │ └── ConvertToTransferRecordFn.java │ ├── options │ │ ├── BigQueryImportOptions.java │ │ └── AwsOptionsParser.java │ └── bigquery │ │ └── Schema.java │ ├── streaming │ ├── StreamingFilePipeline.java │ └── StreamingFilePipeline2.java │ └── batch │ └── BigQueryImportPipeline.java ├── .gitignore ├── README.md ├── pom.xml ├── transfers_july.csv ├── sample_1.csv └── sample_2.csv /src/main/resources/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "user_id": "STRING", 3 | "amount": "FLOAT64" 4 | } -------------------------------------------------------------------------------- /src/main/java/com/harland/example/common/utils/MathUtils.java: -------------------------------------------------------------------------------- 1 | package com.harland.example.common.utils; 2 | 3 | public class MathUtils { 4 | 5 | public static Double roundToTwoDecimals(Double value) { 6 | return Math.round(value * 100.0) / 100.0; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/harland/example/common/utils/JsonSchemaReader.java: -------------------------------------------------------------------------------- 1 | package com.harland.example.common.utils; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.JsonObject; 5 | 6 | import java.io.File; 7 | import java.io.FileNotFoundException; 8 | import java.io.FileReader; 9 | import java.util.Objects; 10 | 11 | public class JsonSchemaReader { 12 | 13 | public static JsonObject readSchemaFile(String schemaFileName) throws FileNotFoundException { 14 | File schemaFile = 15 | new File(Objects.requireNonNull(JsonSchemaReader.class.getClassLoader().getResource(schemaFileName)).getFile()); 16 | return new Gson().fromJson(new FileReader(schemaFile), JsonObject.class); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/harland/example/common/model/TransferRecord.java: -------------------------------------------------------------------------------- 1 | package com.harland.example.common.model; 2 | 3 | import java.io.Serializable; 4 | 5 | public class TransferRecord implements Serializable { 6 | 7 | private String user; 8 | private String transferTo; 9 | private Double amount; 10 | 11 | public TransferRecord(String user, String transferTo, Double amount) { 12 | this.user = user; 13 | this.transferTo = transferTo; 14 | this.amount = amount; 15 | } 16 | 17 | public String getUser() { 18 | return user; 19 | } 20 | 21 | public String getTransferTo() { 22 | return transferTo; 23 | } 24 | 25 | public Double getAmount() { 26 | return amount; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/harland/example/common/transform/ConvertToTransferRecordFn.java: -------------------------------------------------------------------------------- 1 | package com.harland.example.common.transform; 2 | 3 | import com.harland.example.common.model.TransferRecord; 4 | import org.apache.beam.sdk.transforms.DoFn; 5 | 6 | /** 7 | * Takes a String representing comma delimited row and converts it to a BigQuery TableRow for 8 | * storage. 9 | */ 10 | public class ConvertToTransferRecordFn extends DoFn { 11 | 12 | @ProcessElement 13 | public void processElement(@Element String row, OutputReceiver receiver) { 14 | String[] fields = row.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)"); 15 | 16 | // Skips over the header row 17 | if (!fields[0].equals("user_id")) { 18 | receiver.output(new TransferRecord(fields[0], fields[1], Double.parseDouble(fields[2]))); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/harland/example/common/options/BigQueryImportOptions.java: -------------------------------------------------------------------------------- 1 | package com.harland.example.common.options; 2 | 3 | import org.apache.beam.sdk.io.aws.options.S3Options; 4 | import org.apache.beam.sdk.options.Default; 5 | import org.apache.beam.sdk.options.Description; 6 | import org.apache.beam.sdk.options.PipelineOptions; 7 | 8 | public interface BigQueryImportOptions extends PipelineOptions, S3Options { 9 | 10 | @Description("BigQuery Table Name") 11 | @Default.String("my-project:my_dataset.my_table") 12 | String getBqTableName(); 13 | 14 | void setBqTableName(String tableName); 15 | 16 | @Description("Import location in the format gs:// or s3://") 17 | @Default.String("gs://my-bucket") 18 | String getBucketUrl(); 19 | 20 | void setBucketUrl(String bucketUrl); 21 | 22 | @Description("AWS S3 Key ID") 23 | @Default.String("KEY") 24 | String getAwsAccessKey(); 25 | 26 | void setAwsAccessKey(String awsAccessKey); 27 | 28 | @Description("AWS S3 Secret Key") 29 | @Default.String("SECRET KEY") 30 | String getAwsSecretKey(); 31 | 32 | void setAwsSecretKey(String awsSecretKey); 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/harland/example/common/bigquery/Schema.java: -------------------------------------------------------------------------------- 1 | package com.harland.example.common.bigquery; 2 | 3 | import com.google.api.services.bigquery.model.TableFieldSchema; 4 | import com.google.api.services.bigquery.model.TableSchema; 5 | import com.google.common.collect.ImmutableList; 6 | import com.google.gson.JsonElement; 7 | import com.google.gson.JsonObject; 8 | 9 | import java.util.Map; 10 | 11 | public class Schema { 12 | 13 | private TableSchema tableSchema; 14 | 15 | public Schema(JsonObject schema) { 16 | parseJson(schema); 17 | } 18 | 19 | public TableSchema getTableSchema() { 20 | return tableSchema; 21 | } 22 | 23 | public String getColumnName(int columnPosition) { 24 | return tableSchema.getFields().get(columnPosition).getName(); 25 | } 26 | 27 | private void parseJson(JsonObject jsonSchema) { 28 | ImmutableList.Builder immutableListBuilder = ImmutableList.builder(); 29 | for (Map.Entry entry : jsonSchema.entrySet()) { 30 | immutableListBuilder.add( 31 | new TableFieldSchema().setName(entry.getKey()).setType(entry.getValue().getAsString())); 32 | } 33 | tableSchema = new TableSchema().setFields(immutableListBuilder.build()); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/harland/example/common/options/AwsOptionsParser.java: -------------------------------------------------------------------------------- 1 | package com.harland.example.common.options; 2 | 3 | import com.amazonaws.auth.AWSStaticCredentialsProvider; 4 | import com.amazonaws.auth.BasicAWSCredentials; 5 | 6 | public class AwsOptionsParser { 7 | 8 | // AWS configuration values 9 | private static final String AWS_DEFAULT_REGION = "eu-west-1"; 10 | private static final String AWS_S3_PREFIX = "s3"; 11 | 12 | /** 13 | * Formats BigQueryImportOptions to include AWS specific configuration. 14 | * 15 | * @param options for running the Cloud Dataflow pipeline. 16 | */ 17 | public static void formatOptions(BigQueryImportOptions options) { 18 | if (options.getBucketUrl().toLowerCase().startsWith(AWS_S3_PREFIX)) { 19 | setAwsCredentials(options); 20 | } 21 | 22 | if (options.getAwsRegion() == null) { 23 | setAwsDefaultRegion(options); 24 | } 25 | } 26 | 27 | private static void setAwsCredentials(BigQueryImportOptions options) { 28 | options.setAwsCredentialsProvider( 29 | new AWSStaticCredentialsProvider( 30 | new BasicAWSCredentials(options.getAwsAccessKey(), options.getAwsSecretKey()))); 31 | } 32 | 33 | private static void setAwsDefaultRegion(BigQueryImportOptions options) { 34 | if (options.getAwsRegion() == null) { 35 | options.setAwsRegion(AWS_DEFAULT_REGION); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 2 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 3 | 4 | # User-specific stuff 5 | .idea 6 | .idea/**/workspace.xml 7 | .idea/**/tasks.xml 8 | .idea/**/usage.statistics.xml 9 | .idea/**/dictionaries 10 | .idea/**/shelf 11 | 12 | # Generated files 13 | .idea/**/contentModel.xml 14 | 15 | # Sensitive or high-churn files 16 | .idea/**/dataSources/ 17 | .idea/**/dataSources.ids 18 | .idea/**/dataSources.local.xml 19 | .idea/**/sqlDataSources.xml 20 | .idea/**/dynamic.xml 21 | .idea/**/uiDesigner.xml 22 | .idea/**/dbnavigator.xml 23 | 24 | # Gradle 25 | .idea/**/gradle.xml 26 | .idea/**/libraries 27 | 28 | # Gradle and Maven with auto-import 29 | # When using Gradle or Maven with auto-import, you should exclude module files, 30 | # since they will be recreated, and may cause churn. Uncomment if using 31 | # auto-import. 32 | # .idea/modules.xml 33 | # .idea/*.iml 34 | # .idea/modules 35 | 36 | # CMake 37 | cmake-build-*/ 38 | 39 | # Mongo Explorer plugin 40 | .idea/**/mongoSettings.xml 41 | 42 | # File-based project format 43 | *.iws 44 | 45 | # IntelliJ 46 | out/ 47 | 48 | # mpeltonen/sbt-idea plugin 49 | .idea_modules/ 50 | 51 | # JIRA plugin 52 | atlassian-ide-plugin.xml 53 | 54 | # Cursive Clojure plugin 55 | .idea/replstate.xml 56 | 57 | # Crashlytics plugin (for Android Studio and IntelliJ) 58 | com_crashlytics_export_strings.xml 59 | crashlytics.properties 60 | crashlytics-build.properties 61 | fabric.properties 62 | 63 | # Editor-based Rest Client 64 | .idea/httpRequests 65 | 66 | # Java 67 | */target/* 68 | 69 | # Mac 70 | .DS_Store 71 | *.iml 72 | /target 73 | target/ 74 | -------------------------------------------------------------------------------- /src/main/java/com/harland/example/streaming/StreamingFilePipeline.java: -------------------------------------------------------------------------------- 1 | package com.harland.example.streaming; 2 | 3 | import com.google.api.services.bigquery.model.TableRow; 4 | import com.harland.example.common.bigquery.Schema; 5 | import com.harland.example.common.model.TransferRecord; 6 | import com.harland.example.common.options.AwsOptionsParser; 7 | import com.harland.example.common.options.BigQueryImportOptions; 8 | import com.harland.example.common.transform.ConvertToTransferRecordFn; 9 | import com.harland.example.common.utils.JsonSchemaReader; 10 | import org.apache.beam.sdk.Pipeline; 11 | import org.apache.beam.sdk.io.TextIO; 12 | import org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO; 13 | import org.apache.beam.sdk.options.PipelineOptionsFactory; 14 | import org.apache.beam.sdk.transforms.ParDo; 15 | import org.apache.beam.sdk.transforms.Watch; 16 | import org.joda.time.Duration; 17 | 18 | import java.io.IOException; 19 | 20 | public class StreamingFilePipeline { 21 | 22 | private static final String SCHEMA_FILE = "schema.json"; 23 | 24 | public static void main(String... args) throws IOException { 25 | BigQueryImportOptions options = 26 | PipelineOptionsFactory.fromArgs(args).as(BigQueryImportOptions.class); 27 | 28 | // Configure AWS specific options 29 | AwsOptionsParser.formatOptions(options); 30 | 31 | runPipeline(options); 32 | } 33 | 34 | private static void runPipeline(BigQueryImportOptions options) throws IOException { 35 | Pipeline p = Pipeline.create(options); 36 | 37 | Schema schema = new Schema(JsonSchemaReader.readSchemaFile(SCHEMA_FILE)); 38 | String bqColUser = schema.getColumnName(0); 39 | String bqColAmount = schema.getColumnName(1); 40 | 41 | p.apply( 42 | "ReadFromStorage", 43 | TextIO.read() 44 | .from(options.getBucketUrl() + "/*") 45 | .watchForNewFiles(Duration.ZERO, Watch.Growth.never())) 46 | 47 | // Convert each CSV row to a transfer record object 48 | .apply("ConvertToTransferRecord", ParDo.of(new ConvertToTransferRecordFn())) 49 | 50 | // Write the result to BigQuery. 51 | .apply( 52 | "WriteToBigQuery", 53 | BigQueryIO.write() 54 | .to(options.getBqTableName()) 55 | .withSchema(schema.getTableSchema()) 56 | .withFormatFunction( 57 | (TransferRecord record) -> 58 | new TableRow() 59 | .set(bqColUser, record.getUser()) 60 | .set(bqColAmount, record.getAmount())) 61 | .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED) 62 | .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)); 63 | 64 | p.run(); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/com/harland/example/batch/BigQueryImportPipeline.java: -------------------------------------------------------------------------------- 1 | package com.harland.example.batch; 2 | 3 | import com.google.api.services.bigquery.model.TableRow; 4 | import com.harland.example.common.bigquery.Schema; 5 | import com.harland.example.common.model.TransferRecord; 6 | import com.harland.example.common.options.AwsOptionsParser; 7 | import com.harland.example.common.options.BigQueryImportOptions; 8 | import com.harland.example.common.transform.ConvertToTransferRecordFn; 9 | import com.harland.example.common.utils.MathUtils; 10 | import com.harland.example.common.utils.JsonSchemaReader; 11 | import org.apache.beam.sdk.Pipeline; 12 | import org.apache.beam.sdk.io.TextIO; 13 | import org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO; 14 | import org.apache.beam.sdk.options.PipelineOptionsFactory; 15 | import org.apache.beam.sdk.transforms.MapElements; 16 | import org.apache.beam.sdk.transforms.ParDo; 17 | import org.apache.beam.sdk.transforms.Sum; 18 | import org.apache.beam.sdk.values.KV; 19 | import org.apache.beam.sdk.values.TypeDescriptors; 20 | 21 | import java.io.IOException; 22 | 23 | /** 24 | * Pipeline for importing CSV data from Google Cloud Storage or AWS S3 and writing it to Google 25 | * BigQuery. 26 | */ 27 | public class BigQueryImportPipeline { 28 | 29 | private static final String SCHEMA_FILE = "schema.json"; 30 | 31 | public static void main(String... args) throws IOException { 32 | BigQueryImportOptions options = 33 | PipelineOptionsFactory.fromArgs(args).as(BigQueryImportOptions.class); 34 | 35 | // Configure AWS specific options 36 | AwsOptionsParser.formatOptions(options); 37 | 38 | runPipeline(options); 39 | } 40 | 41 | private static void runPipeline(BigQueryImportOptions options) throws IOException { 42 | Pipeline p = Pipeline.create(options); 43 | 44 | Schema schema = new Schema(JsonSchemaReader.readSchemaFile(SCHEMA_FILE)); 45 | String bqColUser = schema.getColumnName(0); 46 | String bqColAmount = schema.getColumnName(1); 47 | 48 | // Read all text files from either a Google Cloud Storage or AWS S3 bucket. 49 | p.apply("ReadFromStorage", TextIO.read().from(options.getBucketUrl() + "/*")) 50 | 51 | // Convert our CSV rows into a TransferRecord object. 52 | .apply("ConvertToTransferRecord", ParDo.of(new ConvertToTransferRecordFn())) 53 | 54 | // Map our elements into KV pairs by user. 55 | .apply( 56 | "CreateKVPairs", 57 | MapElements.into( 58 | TypeDescriptors.kvs(TypeDescriptors.strings(), TypeDescriptors.doubles())) 59 | .via((TransferRecord record) -> KV.of(record.getUser(), record.getAmount()))) 60 | 61 | // Sum our KV pairs for each user. 62 | .apply("SumAmountsPerUser", Sum.doublesPerKey()) 63 | 64 | // Write the result to BigQuery. 65 | .apply( 66 | "WriteToBigQuery", 67 | BigQueryIO.>write() 68 | .to(options.getBqTableName()) 69 | .withSchema(schema.getTableSchema()) 70 | .withFormatFunction( 71 | (KV record) -> 72 | new TableRow() 73 | .set(bqColUser, record.getKey()) 74 | .set(bqColAmount, MathUtils.roundToTwoDecimals(record.getValue()))) 75 | .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED) 76 | .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)); 77 | p.run(); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/com/harland/example/streaming/StreamingFilePipeline2.java: -------------------------------------------------------------------------------- 1 | package com.harland.example.streaming; 2 | 3 | import com.google.api.services.bigquery.model.TableRow; 4 | import com.harland.example.common.bigquery.Schema; 5 | import com.harland.example.common.model.TransferRecord; 6 | import com.harland.example.common.options.AwsOptionsParser; 7 | import com.harland.example.common.options.BigQueryImportOptions; 8 | import com.harland.example.common.transform.ConvertToTransferRecordFn; 9 | import com.harland.example.common.utils.JsonSchemaReader; 10 | import com.harland.example.common.utils.MathUtils; 11 | import org.apache.beam.sdk.Pipeline; 12 | import org.apache.beam.sdk.io.TextIO; 13 | import org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO; 14 | import org.apache.beam.sdk.options.PipelineOptionsFactory; 15 | import org.apache.beam.sdk.transforms.MapElements; 16 | import org.apache.beam.sdk.transforms.ParDo; 17 | import org.apache.beam.sdk.transforms.Sum; 18 | import org.apache.beam.sdk.transforms.Watch; 19 | import org.apache.beam.sdk.transforms.windowing.FixedWindows; 20 | import org.apache.beam.sdk.transforms.windowing.Window; 21 | import org.apache.beam.sdk.values.KV; 22 | import org.apache.beam.sdk.values.TypeDescriptors; 23 | import org.joda.time.Duration; 24 | 25 | import java.io.IOException; 26 | 27 | public class StreamingFilePipeline2 { 28 | 29 | private static final String SCHEMA_FILE = "schema.json"; 30 | 31 | private static final int WINDOW_SIZE_SECONDS = 30; 32 | 33 | public static void main(String... args) throws IOException { 34 | BigQueryImportOptions options = 35 | PipelineOptionsFactory.fromArgs(args).as(BigQueryImportOptions.class); 36 | 37 | // Configure AWS specific options 38 | AwsOptionsParser.formatOptions(options); 39 | 40 | runPipeline(options); 41 | } 42 | 43 | private static void runPipeline(BigQueryImportOptions options) throws IOException { 44 | Pipeline p = Pipeline.create(options); 45 | 46 | Schema schema = new Schema(JsonSchemaReader.readSchemaFile(SCHEMA_FILE)); 47 | String bqColUser = schema.getColumnName(0); 48 | String bqColAmount = schema.getColumnName(1); 49 | 50 | p.apply( 51 | "ReadFromStorage", 52 | TextIO.read() 53 | .from(options.getBucketUrl() + "/*") 54 | .watchForNewFiles(Duration.ZERO, Watch.Growth.never())) 55 | 56 | // Apply a windowing function for our unbound source 57 | .apply( 58 | String.format("WindowInto%dSecondWindows", WINDOW_SIZE_SECONDS), 59 | Window.into(FixedWindows.of(Duration.standardSeconds(WINDOW_SIZE_SECONDS)))) 60 | 61 | // Convert each CSV row to a transfer record object 62 | .apply("ConvertToTransferRecord", ParDo.of(new ConvertToTransferRecordFn())) 63 | 64 | // Map our elements into KV pairs by user. 65 | .apply( 66 | "CreateKVPairs", 67 | MapElements.into( 68 | TypeDescriptors.kvs(TypeDescriptors.strings(), TypeDescriptors.doubles())) 69 | .via((TransferRecord record) -> KV.of(record.getUser(), record.getAmount()))) 70 | 71 | // Sum our KV pairs for each user. 72 | .apply("SumAmountsPerUser", Sum.doublesPerKey()) 73 | 74 | // Write the result to BigQuery. 75 | .apply( 76 | "WriteToBigQuery", 77 | BigQueryIO.>write() 78 | .to(options.getBqTableName()) 79 | .withSchema(schema.getTableSchema()) 80 | .withFormatFunction( 81 | (KV record) -> 82 | new TableRow() 83 | .set(bqColUser, record.getKey()) 84 | .set(bqColAmount, MathUtils.roundToTwoDecimals(record.getValue()))) 85 | .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED) 86 | .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)); 87 | 88 | p.run(); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Apache Beam Examples 2 | 3 | ## About 4 | This repository contains Apache Beam code examples for running on Google Cloud Dataflow. The following examples are contained in this repository: 5 | * Streaming pipeline 6 | * Reading CSVs from a Cloud Storage bucket and streaming the data into BigQuery 7 | * Batch pipeline 8 | * Reading from AWS S3 and writing to Google BigQuery 9 | * Reading from Google Cloud Storage and writing to Google BigQuery 10 | 11 | ## Streaming pipeline 12 | The goal of this example is to overcome the limitations of micro-batching with BigQuery. 13 | This exapmle covers the following steps: 14 | * Reads a number of CSV files from Cloud Storage 15 | * Covers the CSV files into a Java Object 16 | * Writes the rows into BigQuery 17 | 18 | For more details on the limitations of micro-batching within BigQuery, check out my blog. 19 | 20 | ### Running the example 21 | 22 | #### Setup & Configuration 23 | * Ensure that you have billing enabled for your project 24 | * Enable the following Google Cloud Platform APIs: 25 | * Cloud Dataflow, Compute Engine, Stackdriver Logging, Google Cloud Storage, Google Cloud Storage JSON, BigQuery, Google Cloud Pub/Sub, Google Cloud Datastore, and Google Cloud Resource Manager APIs. 26 | * Create a Google Cloud Storage bucket to stage your Cloud Dataflow code. Make sure you note the bucket name as you will need it later. 27 | * Create a BigQuery dataset called finance. Keep note of the fully qualified dataset name which is in the format projectName:finance 28 | * Upload the sample_1.csv and sample_2.csv to your Google Cloud Storage bucket 29 | * Validate that the data has been loaded into BigQuery 30 | 31 | #### Reading from Cloud Storage and writing to BigQuery 32 | ``` 33 | mvn compile exec:java \ 34 | -Dexec.mainClass=com.harland.example.batch.BigQueryImportPipeline \ 35 | -Dexec.args="--project= \ 36 | --bucketUrl=gs:// \ 37 | --bqTableName= \ 38 | --runner=DataflowRunner \ 39 | --region=europe-west1 \ 40 | --stagingLocation=gs:///stage/ \ 41 | --tempLocation=gs:///temp/" 42 | ``` 43 | 44 | ## Batch Pipeline 45 | The goal of the example code is to calculate the total amount transferred for each user_id in the transfers_july.csv. 46 | This is purely fictitious example that covers the following steps:  47 | * Reads a CSV file from AWS S3  48 | * Converts the CSV file into a Java Object 49 | * Creates key, value pairs where user_id is the key and amount is the value 50 | * Sums the amount for each user_id 51 | * Writes the result to BigQuery 52 | 53 | ### Running the example 54 | 55 | #### Setup & Configuration 56 | * Ensure that you have billing enabled for your project 57 | * Enable the following Google Cloud Platform APIs: 58 | * Cloud Dataflow, Compute Engine, Stackdriver Logging, Google Cloud Storage, Google Cloud Storage JSON, BigQuery, Google Cloud Pub/Sub, Google Cloud Datastore, and Google Cloud Resource Manager APIs. 59 | * Create a Google Cloud Storage bucket to stage your Cloud Dataflow code. Make sure you note the bucket name as you will need it later. 60 | * Create a BigQuery dataset called finance. Keep note of the fully qualified dataset name which is in the format projectName:finance 61 | * Upload the transfers_july.csv to your AWS S3/Google Cloud Storage bucket 62 | 63 | #### Reading from AWS S3 and writing to BigQuery 64 | ``` 65 | mvn compile exec:java \ 66 | -Dexec.mainClass=com.harland.example.batch.BigQueryImportPipeline \ 67 | -Dexec.args="--project= \ 68 | --bucketUrl=s3:// \ 69 | --awsRegion=eu-west-1 \ 70 | --bqTableName= \ 71 | --awsAccessKey= \ 72 | --awsSecretKey= \ 73 | --runner=DataflowRunner \ 74 | --region=europe-west1 \ 75 | --stagingLocation=gs:///stage/ \ 76 | --tempLocation=gs:///temp/" 77 | ``` 78 | 79 | #### Reading from Google Cloud Storage and writing to BigQuery 80 | ``` 81 | mvn compile exec:java \ 82 | -Dexec.mainClass=com.harland.example.batch.BigQueryImportPipeline \ 83 | -Dexec.args="--project= \ 84 | --bucketUrl=gs:// \ 85 | --bqTableName= \ 86 | --runner=DataflowRunner \ 87 | --region=europe-west1 \ 88 | --stagingLocation=gs:///stage/ \ 89 | --tempLocation=gs:///temp/" 90 | ``` 91 | 92 | ## Built with 93 | * Java 8 94 | * Maven 3 95 | * Apache Beam 2.5.0 96 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.harland 8 | beam-pipelines 9 | 0.1 10 | 11 | jar 12 | 13 | 14 | UTF-8 15 | v2-rev374-1.23.0 16 | 1.23.0 17 | 20.0 18 | 1.3 19 | 2.4 20 | 2.6.0 21 | 4.12 22 | 3.7.0 23 | 1.6.0 24 | 3.0.2 25 | 3.1.0 26 | 1.9.5 27 | v1-rev382-1.23.0 28 | 1.7.25 29 | 2.20.1 30 | 31 | 32 | 33 | 34 | 35 | org.apache.maven.plugins 36 | maven-compiler-plugin 37 | ${maven-compiler-plugin.version} 38 | 39 | 1.8 40 | 1.8 41 | 42 | 43 | 44 | 45 | org.apache.maven.plugins 46 | maven-surefire-plugin 47 | ${surefire-plugin.version} 48 | 49 | all 50 | 4 51 | true 52 | 53 | 54 | 55 | org.apache.maven.surefire 56 | surefire-junit47 57 | ${surefire-plugin.version} 58 | 59 | 60 | 61 | 62 | 64 | 65 | org.apache.maven.plugins 66 | maven-jar-plugin 67 | ${maven-jar-plugin.version} 68 | 69 | 70 | 74 | 75 | org.apache.maven.plugins 76 | maven-shade-plugin 77 | ${maven-shade-plugin.version} 78 | 79 | 80 | package 81 | 82 | shade 83 | 84 | 85 | ${project.artifactId}-bundled-${project.version} 86 | 87 | 88 | *:* 89 | 90 | META-INF/LICENSE 91 | META-INF/*.SF 92 | META-INF/*.DSA 93 | META-INF/*.RSA 94 | 95 | 96 | 97 | 98 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | org.codehaus.mojo 111 | exec-maven-plugin 112 | ${exec-maven-plugin.version} 113 | 114 | false 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | org.apache.beam 125 | beam-sdks-java-core 126 | ${beam.version} 127 | 128 | 129 | 130 | org.apache.beam 131 | beam-sdks-java-io-google-cloud-platform 132 | ${beam.version} 133 | 134 | 135 | 136 | org.apache.beam 137 | beam-sdks-java-io-amazon-web-services 138 | ${beam.version} 139 | 140 | 141 | 142 | org.apache.beam 143 | beam-runners-google-cloud-dataflow-java 144 | ${beam.version} 145 | runtime 146 | 147 | 148 | 149 | org.apache.httpcomponents 150 | httpclient 151 | 4.5.2 152 | runtime 153 | 154 | 155 | 156 | 157 | com.google.api-client 158 | google-api-client 159 | ${google-clients.version} 160 | 161 | 163 | 164 | com.google.guava 165 | guava-jdk5 166 | 167 | 168 | 169 | 170 | 171 | com.google.apis 172 | google-api-services-bigquery 173 | ${bigquery.version} 174 | 175 | 177 | 178 | com.google.guava 179 | guava-jdk5 180 | 181 | 182 | 183 | 184 | 185 | com.google.http-client 186 | google-http-client 187 | ${google-clients.version} 188 | 189 | 191 | 192 | com.google.guava 193 | guava-jdk5 194 | 195 | 196 | 197 | 198 | 199 | com.google.apis 200 | google-api-services-pubsub 201 | ${pubsub.version} 202 | 203 | 205 | 206 | com.google.guava 207 | guava-jdk5 208 | 209 | 210 | 211 | 212 | 213 | com.google.code.gson 214 | gson 215 | 2.8.5 216 | 217 | 218 | 219 | joda-time 220 | joda-time 221 | ${joda.version} 222 | 223 | 224 | 225 | com.google.guava 226 | guava 227 | ${guava.version} 228 | 229 | 230 | 231 | 232 | org.slf4j 233 | slf4j-api 234 | ${slf4j.version} 235 | 236 | 237 | 238 | org.slf4j 239 | slf4j-jdk14 240 | ${slf4j.version} 241 | 242 | runtime 243 | 244 | 245 | 247 | 248 | org.hamcrest 249 | hamcrest-all 250 | ${hamcrest.version} 251 | 252 | 253 | 254 | junit 255 | junit 256 | ${junit.version} 257 | 258 | 259 | 260 | org.mockito 261 | mockito-core 262 | ${mockito.version} 263 | test 264 | 265 | 266 | 267 | -------------------------------------------------------------------------------- /transfers_july.csv: -------------------------------------------------------------------------------- 1 | user_id,transfer_to_id,amount 2 | 94,40,37.28 3 | 92,20,21.87 4 | 91,81,7.68 5 | 92,16,31.34 6 | 95,33,5.16 7 | 89,57,35.91 8 | 57,75,58.98 9 | 65,100,23.13 10 | 68,87,28.96 11 | 1,48,79.35 12 | 69,35,1.56 13 | 36,40,45.18 14 | 76,65,64.28 15 | 67,52,19.92 16 | 72,84,70.25 17 | 64,65,87.42 18 | 67,87,82.33 19 | 94,31,82.28 20 | 51,15,73.93 21 | 78,55,7.45 22 | 78,53,64.86 23 | 26,11,45.02 24 | 33,8,23.49 25 | 27,8,20.22 26 | 93,62,60.48 27 | 80,45,57.36 28 | 54,93,14.29 29 | 68,61,43.17 30 | 1,9,99.43 31 | 58,80,96.1 32 | 98,75,67.26 33 | 90,88,64.33 34 | 18,40,90.1 35 | 15,65,6.22 36 | 5,27,89.49 37 | 23,32,23.19 38 | 43,48,36.92 39 | 70,60,26.79 40 | 4,92,42.58 41 | 15,75,94.44 42 | 63,78,65.61 43 | 60,75,82.28 44 | 67,100,61.5 45 | 59,14,56.55 46 | 68,15,12.12 47 | 52,49,52.99 48 | 18,10,28.87 49 | 70,74,12.65 50 | 21,83,87.81 51 | 76,95,43.27 52 | 18,97,24.73 53 | 84,33,82.8 54 | 51,14,20.19 55 | 52,66,9.16 56 | 79,11,92.38 57 | 18,19,95.31 58 | 59,86,42.44 59 | 87,80,3.44 60 | 90,47,19.73 61 | 85,13,48.92 62 | 35,50,43.13 63 | 26,45,19.22 64 | 87,35,62.49 65 | 83,44,40.34 66 | 68,43,18.63 67 | 86,97,70.79 68 | 39,91,58.33 69 | 83,16,94.34 70 | 39,37,90.26 71 | 69,45,29.9 72 | 3,44,56.46 73 | 55,21,18.29 74 | 70,85,66.68 75 | 50,54,95.72 76 | 44,13,27.6 77 | 63,69,98.56 78 | 94,18,54.45 79 | 18,58,78.27 80 | 32,46,43.79 81 | 91,93,60.08 82 | 6,13,8.19 83 | 69,17,87.94 84 | 81,38,46.53 85 | 19,39,83.72 86 | 6,5,90.99 87 | 88,4,5.48 88 | 22,70,34.32 89 | 36,47,69.47 90 | 25,60,22.82 91 | 49,12,41.58 92 | 22,6,49.67 93 | 55,86,21.31 94 | 71,72,93.04 95 | 3,60,53.99 96 | 24,95,93.99 97 | 79,100,42.2 98 | 26,85,6.16 99 | 17,10,17.58 100 | 24,62,81.22 101 | 28,58,72.96 102 | 63,87,77.26 103 | 44,3,58.37 104 | 91,88,27.65 105 | 37,8,40.36 106 | 23,87,89.23 107 | 74,59,8.25 108 | 22,20,54.33 109 | 45,50,98.65 110 | 45,35,29.45 111 | 64,100,54.97 112 | 75,25,11.43 113 | 93,97,84.34 114 | 64,17,48.33 115 | 49,17,24.42 116 | 35,42,54.6 117 | 12,64,56.78 118 | 32,43,76.47 119 | 3,23,80.54 120 | 63,12,66.68 121 | 99,62,8.48 122 | 13,51,10.93 123 | 11,37,42.64 124 | 27,51,8.64 125 | 20,87,94.36 126 | 11,11,66.89 127 | 75,47,28.75 128 | 100,70,80.61 129 | 53,23,1.27 130 | 54,100,22.76 131 | 45,63,87.84 132 | 22,74,81.38 133 | 78,86,27.86 134 | 93,27,88.74 135 | 6,19,27.54 136 | 71,11,23.86 137 | 62,99,16.31 138 | 94,75,30.9 139 | 38,92,95.74 140 | 72,27,92.08 141 | 37,4,43.19 142 | 23,49,10.56 143 | 73,58,11.71 144 | 51,90,75.21 145 | 58,63,59.18 146 | 98,61,45.89 147 | 17,79,18.7 148 | 51,91,36.05 149 | 23,53,40.25 150 | 37,13,7.54 151 | 86,20,64.85 152 | 13,40,70.39 153 | 65,16,95.5 154 | 64,5,40.82 155 | 91,92,15.07 156 | 3,39,16.4 157 | 39,92,83.35 158 | 25,87,23.71 159 | 74,55,43.32 160 | 61,92,82.28 161 | 72,41,55.72 162 | 68,50,60.38 163 | 29,29,54.06 164 | 31,24,20.53 165 | 81,97,19.64 166 | 18,62,36.28 167 | 25,64,93.1 168 | 99,39,94.86 169 | 9,86,13.33 170 | 40,26,66.07 171 | 76,3,77.48 172 | 8,43,90.14 173 | 34,2,71.93 174 | 61,4,21.13 175 | 29,39,80.39 176 | 45,7,42.7 177 | 73,11,9.36 178 | 86,4,73.13 179 | 69,90,29.31 180 | 50,96,36.04 181 | 90,31,24.5 182 | 23,85,65.13 183 | 86,52,42.4 184 | 3,60,13.63 185 | 26,56,16.19 186 | 13,82,63.82 187 | 78,20,83.82 188 | 44,13,91.78 189 | 25,6,9.2 190 | 60,24,29.14 191 | 80,83,65.83 192 | 13,14,77.1 193 | 60,42,75.38 194 | 90,49,77.09 195 | 88,72,27.87 196 | 84,47,82.5 197 | 60,89,18.69 198 | 26,29,19.81 199 | 26,99,93.0 200 | 23,90,47.7 201 | 63,18,65.18 202 | 29,27,61.7 203 | 39,41,56.52 204 | 47,26,68.58 205 | 5,98,7.14 206 | 84,14,26.22 207 | 2,13,43.82 208 | 43,24,66.47 209 | 75,16,15.24 210 | 87,43,84.95 211 | 78,40,84.53 212 | 49,7,58.97 213 | 2,11,33.04 214 | 71,26,63.81 215 | 26,60,41.15 216 | 53,6,12.41 217 | 95,95,73.26 218 | 37,42,46.91 219 | 50,41,50.86 220 | 52,75,4.85 221 | 49,64,24.22 222 | 57,64,34.6 223 | 19,22,14.36 224 | 31,99,74.03 225 | 45,15,9.55 226 | 95,6,38.86 227 | 46,89,23.39 228 | 64,1,28.42 229 | 18,61,33.62 230 | 58,10,18.49 231 | 36,67,41.06 232 | 24,46,83.86 233 | 35,14,68.03 234 | 76,93,49.26 235 | 58,36,35.66 236 | 83,31,34.99 237 | 90,59,4.96 238 | 50,25,26.81 239 | 63,71,86.15 240 | 28,63,61.8 241 | 27,90,24.62 242 | 11,100,11.24 243 | 40,12,86.09 244 | 51,72,77.45 245 | 56,86,41.91 246 | 1,2,34.47 247 | 65,10,56.29 248 | 4,9,36.32 249 | 44,88,19.37 250 | 58,52,92.64 251 | 95,40,8.56 252 | 88,61,19.92 253 | 26,26,39.11 254 | 11,76,23.19 255 | 38,1,23.82 256 | 70,8,55.22 257 | 36,88,92.35 258 | 54,65,62.55 259 | 73,69,69.92 260 | 79,95,41.75 261 | 4,81,8.92 262 | 24,34,30.08 263 | 60,50,41.57 264 | 18,27,22.06 265 | 38,5,48.62 266 | 17,12,14.97 267 | 5,58,55.59 268 | 38,39,13.39 269 | 57,82,98.62 270 | 41,35,15.55 271 | 38,29,81.33 272 | 63,15,58.63 273 | 14,67,3.61 274 | 53,3,91.57 275 | 69,53,8.41 276 | 19,92,47.29 277 | 38,55,28.15 278 | 84,13,32.25 279 | 70,43,88.25 280 | 99,6,54.22 281 | 19,94,1.04 282 | 80,50,19.72 283 | 17,56,97.5 284 | 79,50,4.1 285 | 21,75,60.35 286 | 80,11,72.41 287 | 90,100,10.99 288 | 22,50,44.3 289 | 41,9,68.04 290 | 100,53,33.23 291 | 12,87,49.95 292 | 66,42,30.01 293 | 99,98,85.32 294 | 100,89,71.2 295 | 37,31,61.06 296 | 73,68,27.68 297 | 82,91,25.11 298 | 75,55,46.74 299 | 56,91,8.87 300 | 84,49,16.92 301 | 15,17,29.18 302 | 32,53,53.21 303 | 45,23,6.54 304 | 44,45,45.43 305 | 34,2,51.85 306 | 93,87,43.14 307 | 78,66,55.85 308 | 67,97,98.61 309 | 31,16,75.98 310 | 29,28,67.73 311 | 30,96,77.66 312 | 84,51,26.55 313 | 12,54,24.15 314 | 44,70,6.34 315 | 57,9,32.33 316 | 91,50,86.09 317 | 10,13,86.68 318 | 51,29,40.63 319 | 37,19,22.92 320 | 35,21,80.63 321 | 96,16,32.86 322 | 39,97,54.44 323 | 22,27,74.79 324 | 18,94,44.29 325 | 85,74,80.76 326 | 76,3,33.34 327 | 81,73,24.04 328 | 46,2,48.55 329 | 46,4,46.35 330 | 48,19,1.3 331 | 8,4,58.85 332 | 93,13,22.22 333 | 40,67,42.45 334 | 9,83,17.23 335 | 31,57,2.29 336 | 27,8,63.61 337 | 20,15,60.46 338 | 20,23,6.55 339 | 99,85,72.84 340 | 82,42,41.0 341 | 51,20,12.3 342 | 21,30,90.05 343 | 40,100,99.18 344 | 31,2,43.73 345 | 19,29,53.29 346 | 26,64,81.85 347 | 74,6,7.24 348 | 78,11,35.21 349 | 49,54,91.39 350 | 78,30,37.66 351 | 19,79,80.21 352 | 16,87,72.25 353 | 18,70,56.98 354 | 29,65,80.36 355 | 80,48,26.58 356 | 6,44,80.94 357 | 12,85,73.34 358 | 30,67,82.31 359 | 27,84,36.05 360 | 3,90,65.74 361 | 13,39,32.68 362 | 22,15,47.27 363 | 23,85,2.37 364 | 52,33,29.98 365 | 59,99,96.55 366 | 93,16,34.01 367 | 57,16,36.37 368 | 12,72,58.19 369 | 50,8,88.17 370 | 49,92,32.93 371 | 79,80,71.89 372 | 44,37,51.08 373 | 61,49,9.06 374 | 53,40,37.66 375 | 25,46,81.03 376 | 51,86,98.99 377 | 86,8,48.9 378 | 58,69,56.12 379 | 61,30,46.64 380 | 25,92,10.81 381 | 62,78,89.02 382 | 41,31,31.78 383 | 51,73,53.41 384 | 19,84,81.87 385 | 45,21,77.14 386 | 60,61,11.34 387 | 40,54,9.71 388 | 26,99,25.36 389 | 28,30,50.78 390 | 50,17,22.03 391 | 38,48,79.77 392 | 60,86,83.79 393 | 26,22,19.75 394 | 51,14,96.73 395 | 55,7,26.98 396 | 89,44,2.62 397 | 57,71,83.2 398 | 56,82,60.27 399 | 68,55,69.09 400 | 45,23,93.42 401 | 55,37,62.68 402 | 2,46,44.87 403 | 17,92,47.96 404 | 92,97,58.45 405 | 63,9,82.42 406 | 44,86,47.81 407 | 43,86,44.83 408 | 87,62,38.82 409 | 54,55,31.0 410 | 100,33,99.21 411 | 73,70,6.38 412 | 97,64,95.12 413 | 21,20,50.01 414 | 81,48,36.99 415 | 36,26,60.27 416 | 86,55,55.62 417 | 21,93,52.45 418 | 29,51,17.77 419 | 88,35,27.93 420 | 1,49,80.96 421 | 83,41,44.65 422 | 86,34,82.09 423 | 89,77,77.16 424 | 42,14,69.64 425 | 96,82,91.38 426 | 68,18,82.52 427 | 97,35,94.67 428 | 96,56,64.39 429 | 74,87,98.13 430 | 65,40,8.57 431 | 19,52,37.79 432 | 58,27,94.37 433 | 60,31,80.38 434 | 66,90,54.68 435 | 43,92,46.34 436 | 29,16,59.84 437 | 88,7,36.63 438 | 80,77,65.34 439 | 87,60,85.99 440 | 76,69,99.05 441 | 91,14,92.97 442 | 25,35,63.83 443 | 14,88,97.7 444 | 94,76,79.99 445 | 91,86,64.6 446 | 73,89,83.95 447 | 86,34,23.62 448 | 89,41,56.46 449 | 62,77,12.87 450 | 95,15,47.92 451 | 59,3,22.52 452 | 53,81,20.08 453 | 65,71,46.74 454 | 71,58,99.27 455 | 31,5,36.15 456 | 17,79,84.63 457 | 60,6,67.12 458 | 96,92,30.33 459 | 49,33,99.54 460 | 57,13,38.03 461 | 12,37,81.47 462 | 9,33,94.55 463 | 28,58,26.02 464 | 51,100,82.12 465 | 22,24,46.8 466 | 50,19,99.73 467 | 32,1,87.78 468 | 47,92,33.14 469 | 76,42,88.5 470 | 94,52,82.15 471 | 50,48,55.41 472 | 54,10,77.87 473 | 72,45,62.41 474 | 8,14,84.96 475 | 21,58,92.71 476 | 78,58,64.68 477 | 89,29,27.76 478 | 94,19,60.03 479 | 73,90,50.98 480 | 3,25,5.55 481 | 50,5,51.12 482 | 15,10,56.69 483 | 29,74,37.64 484 | 31,31,56.09 485 | 1,73,51.74 486 | 81,46,31.98 487 | 50,17,10.42 488 | 27,78,75.07 489 | 30,39,60.95 490 | 3,51,35.26 491 | 100,36,11.42 492 | 78,84,3.44 493 | 40,33,78.77 494 | 57,16,82.19 495 | 61,8,85.73 496 | 92,61,86.3 497 | 73,89,7.23 498 | 29,39,84.01 499 | 62,14,44.12 500 | 12,91,98.95 501 | 6,37,3.21 502 | 79,21,5.63 503 | 18,70,37.41 504 | 76,15,35.95 505 | 97,6,18.98 506 | 56,54,54.0 507 | 4,61,99.07 508 | 82,6,4.96 509 | 13,30,95.3 510 | 84,65,42.21 511 | 6,12,39.76 512 | 98,4,71.6 513 | 44,81,63.67 514 | 5,39,71.73 515 | 39,60,15.35 516 | 90,5,94.96 517 | 35,23,69.04 518 | 18,53,24.27 519 | 79,67,76.6 520 | 11,51,36.64 521 | 62,76,9.5 522 | 43,68,77.44 523 | 36,23,95.56 524 | 52,50,15.86 525 | 29,37,85.92 526 | 97,27,79.7 527 | 91,22,1.44 528 | 14,46,34.37 529 | 9,75,74.38 530 | 78,32,68.08 531 | 18,22,59.69 532 | 90,71,34.95 533 | 64,90,12.58 534 | 77,33,95.7 535 | 63,32,68.48 536 | 85,16,15.89 537 | 37,97,11.53 538 | 11,55,79.73 539 | 75,64,15.81 540 | 27,32,23.39 541 | 59,29,18.03 542 | 16,17,31.63 543 | 68,38,99.4 544 | 36,38,93.05 545 | 76,18,38.97 546 | 2,65,95.16 547 | 74,53,54.83 548 | 29,95,75.7 549 | 53,82,54.24 550 | 80,90,54.42 551 | 2,79,40.09 552 | 20,38,10.73 553 | 27,44,43.67 554 | 9,19,40.63 555 | 53,74,37.58 556 | 18,17,36.85 557 | 94,88,74.08 558 | 1,63,70.99 559 | 43,66,69.34 560 | 22,25,76.47 561 | 54,78,44.04 562 | 95,62,53.69 563 | 47,34,66.17 564 | 59,59,67.69 565 | 97,49,97.97 566 | 52,21,15.17 567 | 43,46,28.8 568 | 74,47,92.65 569 | 93,60,50.98 570 | 19,28,6.25 571 | 96,1,85.02 572 | 21,7,74.7 573 | 7,35,73.49 574 | 89,89,86.27 575 | 10,89,15.16 576 | 38,42,25.0 577 | 86,50,75.44 578 | 8,12,39.84 579 | 30,69,53.84 580 | 59,32,56.41 581 | 83,34,84.89 582 | 23,14,46.86 583 | 97,2,20.7 584 | 30,88,29.9 585 | 50,27,30.57 586 | 41,88,45.26 587 | 5,3,95.39 588 | 59,85,4.82 589 | 34,49,41.12 590 | 81,26,74.4 591 | 14,87,64.58 592 | 13,94,38.87 593 | 48,60,79.49 594 | 64,38,11.31 595 | 74,7,39.02 596 | 61,64,13.1 597 | 95,55,51.72 598 | 33,2,47.88 599 | 10,64,72.51 600 | 50,5,88.26 601 | 56,100,82.95 602 | 79,5,39.21 603 | 75,56,75.67 604 | 53,45,96.8 605 | 20,28,73.54 606 | 82,100,45.0 607 | 28,59,16.26 608 | 42,87,60.69 609 | 97,38,12.97 610 | 52,47,94.98 611 | 20,16,98.21 612 | 85,10,62.05 613 | 7,37,4.26 614 | 99,58,5.96 615 | 51,99,87.85 616 | 2,53,15.29 617 | 17,96,53.84 618 | 61,52,20.69 619 | 31,74,93.46 620 | 54,91,90.02 621 | 69,11,60.39 622 | 41,95,98.94 623 | 100,47,13.09 624 | 81,8,21.92 625 | 26,85,86.89 626 | 4,77,97.14 627 | 80,79,94.65 628 | 7,14,52.75 629 | 11,87,39.08 630 | 95,47,12.84 631 | 89,38,41.07 632 | 17,10,13.61 633 | 18,55,59.39 634 | 2,57,74.84 635 | 81,53,18.1 636 | 99,59,63.34 637 | 62,18,63.09 638 | 49,18,18.22 639 | 72,46,13.16 640 | 70,53,34.55 641 | 24,83,38.18 642 | 31,98,99.86 643 | 86,37,50.47 644 | 19,24,21.27 645 | 67,14,5.32 646 | 22,93,52.83 647 | 10,11,24.84 648 | 73,51,90.78 649 | 3,50,67.27 650 | 95,62,11.04 651 | 71,24,78.26 652 | 53,89,23.14 653 | 45,95,12.38 654 | 60,36,30.37 655 | 78,83,69.57 656 | 73,65,99.03 657 | 62,48,65.31 658 | 2,3,96.72 659 | 86,89,38.73 660 | 16,44,14.12 661 | 9,23,34.5 662 | 72,51,57.25 663 | 61,78,71.78 664 | 92,40,18.19 665 | 6,41,65.53 666 | 99,49,95.62 667 | 87,57,52.46 668 | 7,62,54.74 669 | 33,66,56.42 670 | 99,32,57.91 671 | 97,34,94.24 672 | 40,65,54.07 673 | 36,99,44.51 674 | 12,96,42.88 675 | 97,69,3.98 676 | 53,60,37.39 677 | 34,13,60.07 678 | 64,38,49.06 679 | 55,32,33.79 680 | 48,51,88.51 681 | 50,24,14.67 682 | 36,83,41.9 683 | 1,36,77.38 684 | 84,37,39.49 685 | 66,67,79.45 686 | 32,64,11.45 687 | 36,52,40.55 688 | 91,49,41.1 689 | 14,21,68.24 690 | 65,28,34.71 691 | 49,47,39.94 692 | 34,8,52.81 693 | 78,28,53.59 694 | 18,7,91.04 695 | 87,40,26.17 696 | 89,26,32.22 697 | 6,36,94.88 698 | 63,81,38.41 699 | 58,88,71.18 700 | 17,23,99.36 701 | 56,92,86.81 702 | 16,80,24.58 703 | 31,61,57.57 704 | 68,62,49.45 705 | 97,4,17.46 706 | 88,69,10.4 707 | 36,51,66.81 708 | 54,71,20.73 709 | 37,35,78.42 710 | 91,31,5.01 711 | 38,77,63.35 712 | 18,27,77.23 713 | 33,2,55.18 714 | 82,37,34.02 715 | 57,37,32.33 716 | 32,60,39.73 717 | 32,14,12.63 718 | 18,68,90.77 719 | 28,58,44.8 720 | 19,17,72.83 721 | 77,100,26.2 722 | 97,44,44.82 723 | 55,12,31.59 724 | 48,23,21.61 725 | 30,28,37.19 726 | 6,84,97.0 727 | 27,68,24.54 728 | 86,20,60.96 729 | 74,91,77.25 730 | 66,78,70.99 731 | 21,84,41.07 732 | 96,79,43.18 733 | 11,3,66.22 734 | 43,25,52.52 735 | 16,15,65.46 736 | 23,93,44.52 737 | 95,37,39.37 738 | 17,92,24.41 739 | 30,41,23.93 740 | 48,88,63.29 741 | 37,91,33.95 742 | 95,98,35.02 743 | 27,1,57.76 744 | 23,20,60.6 745 | 57,84,74.72 746 | 67,24,67.93 747 | 10,76,75.83 748 | 60,75,29.32 749 | 98,66,81.48 750 | 75,24,44.73 751 | 3,27,5.81 752 | 60,42,54.66 753 | 99,12,3.9 754 | 27,57,98.8 755 | 16,63,56.55 756 | 24,65,98.55 757 | 99,7,84.06 758 | 46,62,17.36 759 | 45,65,58.14 760 | 14,80,7.66 761 | 71,14,67.93 762 | 47,13,41.61 763 | 1,86,10.29 764 | 11,61,97.89 765 | 57,34,23.72 766 | 50,55,86.53 767 | 79,27,75.24 768 | 22,30,70.89 769 | 21,56,97.53 770 | 53,90,66.61 771 | 6,34,17.08 772 | 20,41,96.89 773 | 8,25,34.28 774 | 13,44,93.65 775 | 93,15,23.99 776 | 96,85,66.02 777 | 42,1,31.45 778 | 66,35,51.0 779 | 26,86,2.26 780 | 17,48,36.67 781 | 41,9,85.45 782 | 61,29,8.13 783 | 15,58,33.82 784 | 79,56,58.67 785 | 17,57,76.65 786 | 16,54,86.33 787 | 82,47,57.74 788 | 32,67,13.92 789 | 55,6,35.59 790 | 13,6,23.75 791 | 73,86,78.95 792 | 79,70,63.84 793 | 15,47,26.99 794 | 44,75,29.29 795 | 9,44,75.25 796 | 44,77,54.17 797 | 51,73,83.95 798 | 21,51,17.7 799 | 12,72,42.63 800 | 57,62,46.32 801 | 7,19,19.95 802 | 5,36,83.67 803 | 68,81,43.65 804 | 54,60,5.96 805 | 56,65,4.11 806 | 58,79,75.36 807 | 61,37,15.62 808 | 52,15,73.38 809 | 79,43,69.26 810 | 27,29,25.33 811 | 81,2,25.03 812 | 37,71,59.27 813 | 27,62,53.64 814 | 78,40,46.49 815 | 55,51,18.85 816 | 78,25,36.02 817 | 75,57,30.76 818 | 22,12,76.79 819 | 96,25,38.3 820 | 3,32,36.47 821 | 6,26,74.4 822 | 38,83,93.24 823 | 5,42,76.45 824 | 5,85,68.62 825 | 23,72,89.58 826 | 90,3,56.43 827 | 56,54,24.56 828 | 45,8,59.85 829 | 24,26,82.98 830 | 16,49,86.76 831 | 80,81,86.82 832 | 12,8,31.86 833 | 2,40,94.88 834 | 91,37,66.48 835 | 25,32,64.83 836 | 1,32,66.67 837 | 38,72,23.73 838 | 99,97,1.06 839 | 7,88,69.88 840 | 1,48,82.12 841 | 60,100,3.98 842 | 6,26,58.31 843 | 52,100,17.25 844 | 37,24,20.37 845 | 77,81,10.63 846 | 7,54,34.07 847 | 50,36,56.9 848 | 1,93,35.71 849 | 45,73,66.38 850 | 95,43,5.07 851 | 9,19,57.43 852 | 2,61,89.02 853 | 24,97,57.23 854 | 40,58,13.52 855 | 92,13,1.55 856 | 90,87,8.42 857 | 40,71,28.97 858 | 45,68,18.27 859 | 32,32,65.89 860 | 23,45,70.92 861 | 98,68,29.3 862 | 78,46,33.79 863 | 17,89,69.3 864 | 80,5,34.08 865 | 52,46,25.58 866 | 69,43,33.44 867 | 73,56,63.16 868 | 97,17,5.39 869 | 77,74,87.28 870 | 42,80,36.88 871 | 91,4,67.06 872 | 48,27,67.3 873 | 85,54,60.83 874 | 20,54,23.96 875 | 7,7,41.49 876 | 18,33,68.6 877 | 100,69,45.85 878 | 91,59,18.34 879 | 50,63,81.31 880 | 19,2,42.28 881 | 99,64,76.97 882 | 84,84,59.79 883 | 94,46,61.58 884 | 57,88,42.05 885 | 10,97,60.7 886 | 60,79,67.45 887 | 99,4,36.8 888 | 56,13,31.83 889 | 59,4,71.16 890 | 60,9,32.23 891 | 37,49,30.4 892 | 17,37,44.71 893 | 22,67,74.41 894 | 86,78,6.41 895 | 20,45,50.07 896 | 92,93,67.98 897 | 5,37,53.6 898 | 75,3,64.11 899 | 81,18,76.53 900 | 68,75,10.91 901 | 99,48,2.87 902 | 87,37,33.08 903 | 7,18,55.07 904 | 100,10,52.75 905 | 7,10,79.68 906 | 69,79,3.9 907 | 60,96,69.26 908 | 26,61,94.56 909 | 37,4,4.58 910 | 86,48,68.01 911 | 67,20,73.09 912 | 98,79,17.14 913 | 58,13,99.02 914 | 99,51,34.73 915 | 99,1,34.31 916 | 36,32,12.45 917 | 27,100,28.41 918 | 49,18,23.81 919 | 90,28,20.97 920 | 36,3,98.17 921 | 45,40,73.75 922 | 7,100,56.4 923 | 55,48,22.33 924 | 44,8,84.44 925 | 20,22,39.84 926 | 71,64,32.08 927 | 64,21,75.35 928 | 89,60,63.52 929 | 4,53,89.85 930 | 14,67,70.0 931 | 78,46,73.11 932 | 40,9,75.98 933 | 74,46,34.93 934 | 39,99,3.43 935 | 53,13,18.35 936 | 100,13,25.77 937 | 5,95,46.16 938 | 13,12,28.39 939 | 50,30,57.32 940 | 77,58,81.34 941 | 94,54,79.92 942 | 23,75,98.96 943 | 22,14,96.46 944 | 59,20,60.15 945 | 56,58,24.48 946 | 61,48,94.44 947 | 94,67,64.08 948 | 87,22,37.45 949 | 93,9,22.21 950 | 94,67,65.02 951 | 8,91,10.49 952 | 50,78,76.13 953 | 17,47,21.33 954 | 33,84,94.62 955 | 23,63,6.95 956 | 69,95,85.85 957 | 77,94,20.52 958 | 34,66,67.26 959 | 61,61,13.39 960 | 79,20,66.26 961 | 81,57,69.49 962 | 98,3,88.52 963 | 71,79,15.02 964 | 80,15,75.37 965 | 31,14,48.74 966 | 26,82,8.14 967 | 29,53,20.5 968 | 21,61,52.88 969 | 32,56,44.76 970 | 99,13,21.54 971 | 35,53,70.79 972 | 51,69,71.56 973 | 41,84,49.66 974 | 57,52,32.68 975 | 49,86,51.92 976 | 41,31,53.21 977 | 4,74,19.85 978 | 33,84,55.15 979 | 6,85,18.57 980 | 39,66,76.55 981 | 28,4,33.28 982 | 89,80,69.65 983 | 45,13,55.12 984 | 53,9,58.56 985 | 85,92,26.98 986 | 63,49,72.8 987 | 93,79,81.83 988 | 80,34,30.34 989 | 58,62,66.75 990 | 56,40,37.77 991 | 24,67,78.25 992 | 44,8,96.12 993 | 88,83,51.63 994 | 38,36,94.8 995 | 87,14,51.88 996 | 95,33,18.33 997 | 73,86,40.47 998 | 100,13,47.63 999 | 87,10,61.07 1000 | 22,46,58.15 1001 | 70,15,77.39 1002 | -------------------------------------------------------------------------------- /sample_1.csv: -------------------------------------------------------------------------------- 1 | user_id,transfer_to,amount 2 | 15,9,6940.01 3 | 71,77,439.5 4 | 50,35,5400.83 5 | 57,62,7068.95 6 | 68,31,1250.87 7 | 65,100,924.5 8 | 6,64,335.35 9 | 98,48,456.81 10 | 37,86,4093.56 11 | 99,76,756.46 12 | 77,22,6770.02 13 | 83,55,7370.61 14 | 4,25,2677.45 15 | 32,59,2797.78 16 | 5,100,4658.72 17 | 26,51,1095.93 18 | 3,62,7518.83 19 | 18,15,3878.11 20 | 24,29,7901.31 21 | 31,14,6641.44 22 | 2,61,7754.36 23 | 16,100,1686.04 24 | 66,90,6601.95 25 | 83,90,6447.03 26 | 42,19,537.25 27 | 14,33,5074.68 28 | 86,1,5508.86 29 | 50,75,7529.45 30 | 81,54,3382.36 31 | 5,22,7649.69 32 | 77,95,4114.92 33 | 64,13,6786.84 34 | 48,51,4015.77 35 | 6,89,6587.65 36 | 7,34,3857.58 37 | 12,61,5015.24 38 | 94,70,90.9 39 | 29,2,2893.32 40 | 59,74,6588.03 41 | 26,55,3350.66 42 | 94,47,6947.27 43 | 33,15,4149.2 44 | 7,55,2965.52 45 | 99,92,6359.24 46 | 97,50,7775.18 47 | 51,17,2101.59 48 | 64,16,5825.94 49 | 65,94,7051.55 50 | 99,84,3538.28 51 | 100,13,5352.38 52 | 28,7,6153.56 53 | 60,68,4545.86 54 | 69,53,621.01 55 | 94,17,2782.91 56 | 3,97,4314.42 57 | 58,24,6681.29 58 | 62,70,2845.21 59 | 79,37,3369.08 60 | 8,68,1199.56 61 | 90,46,2064.88 62 | 1,60,7515.4 63 | 65,31,1943.4 64 | 98,62,71.07 65 | 50,88,7027.27 66 | 46,32,7127.19 67 | 95,28,822.82 68 | 6,64,6412.63 69 | 17,69,4194.83 70 | 92,43,3064.43 71 | 35,7,915.72 72 | 82,76,1015.49 73 | 47,42,1285.63 74 | 34,51,6267.4 75 | 56,18,4813.15 76 | 64,7,1444.23 77 | 37,32,153.48 78 | 22,2,4989.47 79 | 92,44,3237.13 80 | 1,38,5268.25 81 | 17,64,2435.4 82 | 41,83,158.51 83 | 64,33,7335.61 84 | 46,60,7510.03 85 | 34,4,2094.54 86 | 97,10,4896.5 87 | 32,99,2808.59 88 | 85,40,1956.87 89 | 72,64,3208.63 90 | 40,53,2551.55 91 | 86,98,7465.02 92 | 15,73,5745.59 93 | 43,82,4333.88 94 | 73,32,3584.62 95 | 69,83,5267.49 96 | 48,8,3285.28 97 | 50,58,6104.91 98 | 33,12,2826.69 99 | 52,50,1326.07 100 | 16,79,6073.54 101 | 72,28,4925.87 102 | 44,38,3141.58 103 | 20,53,7853.86 104 | 59,8,7062.85 105 | 22,80,6059.95 106 | 34,91,1434.16 107 | 45,85,1244.69 108 | 9,74,780.99 109 | 46,69,7171.44 110 | 61,12,3132.25 111 | 19,32,7063.64 112 | 63,98,208.44 113 | 63,16,866.7 114 | 45,4,5528.9 115 | 22,39,752.47 116 | 60,95,4313.68 117 | 13,36,1036.11 118 | 89,43,1158.47 119 | 96,78,5280.78 120 | 75,15,1020.25 121 | 63,69,7750.12 122 | 56,72,5842.68 123 | 84,98,6016.59 124 | 93,7,3487.51 125 | 98,33,3790.49 126 | 80,32,3435.76 127 | 87,95,4617.67 128 | 67,18,7411.84 129 | 60,99,7962.79 130 | 31,58,141.38 131 | 99,65,3144.8 132 | 60,95,3172.5 133 | 28,74,6373.24 134 | 88,95,1021.27 135 | 46,67,3746.07 136 | 37,82,484.28 137 | 40,2,884.22 138 | 96,55,2543.05 139 | 89,33,6555.79 140 | 23,85,2277.84 141 | 19,41,1725.56 142 | 18,13,3118.81 143 | 16,37,2724.49 144 | 24,67,7294.96 145 | 79,27,194.27 146 | 33,49,3688.36 147 | 83,84,6815.4 148 | 12,64,3395.52 149 | 47,94,5109.83 150 | 39,55,6771.31 151 | 16,5,2584.35 152 | 11,87,2246.55 153 | 58,60,6651.07 154 | 99,26,3027.17 155 | 88,62,5583.24 156 | 9,74,2414.31 157 | 56,32,6516.02 158 | 80,41,4451.45 159 | 94,43,5172.67 160 | 56,87,3311.8 161 | 84,84,5880.74 162 | 98,46,4918.05 163 | 75,73,6916.0 164 | 18,88,3349.19 165 | 75,66,4563.0 166 | 96,6,6939.63 167 | 56,6,903.86 168 | 96,17,5154.17 169 | 91,72,1051.49 170 | 64,68,1634.34 171 | 72,8,3384.64 172 | 85,36,424.86 173 | 14,86,7515.18 174 | 39,21,7740.09 175 | 17,10,2489.26 176 | 22,54,1423.75 177 | 31,58,1393.12 178 | 39,78,6571.24 179 | 98,45,315.52 180 | 18,44,2351.82 181 | 87,78,5979.44 182 | 87,91,2472.5 183 | 86,29,6452.22 184 | 85,75,197.44 185 | 65,42,1573.6 186 | 29,33,7226.39 187 | 45,47,7138.47 188 | 48,98,2617.85 189 | 28,69,1633.88 190 | 39,36,2516.33 191 | 18,93,149.72 192 | 75,79,6577.02 193 | 67,90,5257.88 194 | 96,74,3026.77 195 | 6,16,4113.4 196 | 36,11,2860.08 197 | 36,97,1585.04 198 | 6,39,7432.88 199 | 42,5,6914.41 200 | 36,74,3093.6 201 | 95,59,5653.61 202 | 5,79,2589.99 203 | 13,19,845.69 204 | 39,86,2335.67 205 | 51,24,7254.96 206 | 61,70,4467.75 207 | 2,33,7085.21 208 | 78,92,3031.35 209 | 51,79,655.27 210 | 44,95,4792.51 211 | 68,62,1373.23 212 | 76,69,3274.77 213 | 31,87,5895.83 214 | 77,35,728.82 215 | 10,75,4615.33 216 | 75,92,3447.5 217 | 80,46,7078.84 218 | 38,35,1874.2 219 | 53,32,6345.96 220 | 14,33,189.33 221 | 73,9,831.52 222 | 62,6,5693.05 223 | 59,76,6690.57 224 | 74,74,7992.72 225 | 61,5,5577.64 226 | 23,4,7420.82 227 | 91,23,2059.08 228 | 64,42,3692.27 229 | 55,73,5782.66 230 | 12,78,4310.88 231 | 42,20,873.31 232 | 52,58,1425.63 233 | 47,34,7266.07 234 | 83,43,2987.67 235 | 54,62,4943.04 236 | 64,32,6119.15 237 | 8,67,2962.66 238 | 29,68,742.23 239 | 92,39,1765.75 240 | 19,7,3068.6 241 | 68,10,3409.62 242 | 40,41,949.68 243 | 74,28,972.62 244 | 93,76,2797.49 245 | 36,93,738.12 246 | 12,74,5178.83 247 | 24,72,530.42 248 | 94,30,7843.27 249 | 78,58,2563.56 250 | 39,69,2371.7 251 | 57,81,2768.69 252 | 15,76,894.23 253 | 53,84,1072.6 254 | 28,30,3815.24 255 | 97,58,1821.1 256 | 35,45,85.84 257 | 24,69,1048.11 258 | 74,52,4057.92 259 | 61,63,1512.02 260 | 76,100,4717.97 261 | 9,55,317.66 262 | 34,15,6962.76 263 | 38,3,3183.6 264 | 34,65,1853.55 265 | 88,46,2907.36 266 | 35,100,6106.45 267 | 89,95,1517.61 268 | 40,70,4689.47 269 | 78,84,7625.27 270 | 18,85,7845.95 271 | 11,94,2353.76 272 | 86,50,2291.87 273 | 54,94,6506.75 274 | 40,31,5089.5 275 | 83,6,413.78 276 | 11,56,7232.41 277 | 33,76,889.27 278 | 97,52,1915.93 279 | 69,80,2368.41 280 | 26,77,1817.52 281 | 96,4,3300.97 282 | 45,86,3216.57 283 | 25,84,1597.78 284 | 58,68,4021.58 285 | 5,88,1762.5 286 | 3,36,2722.04 287 | 29,38,241.33 288 | 58,20,6952.95 289 | 100,30,7739.38 290 | 53,1,7521.0 291 | 91,82,5393.71 292 | 3,32,6760.17 293 | 33,47,5676.89 294 | 93,81,2862.03 295 | 61,88,3292.91 296 | 79,58,3003.08 297 | 77,48,2778.88 298 | 22,98,796.76 299 | 30,10,2116.95 300 | 9,92,5024.07 301 | 95,54,3655.87 302 | 59,5,1741.48 303 | 52,24,3283.77 304 | 90,16,4561.53 305 | 81,49,6790.68 306 | 17,73,2261.74 307 | 56,44,1818.48 308 | 46,48,6777.77 309 | 17,35,6105.47 310 | 100,89,7673.08 311 | 44,47,4615.81 312 | 7,33,4656.34 313 | 94,8,7768.54 314 | 96,17,5207.38 315 | 64,76,4038.76 316 | 80,62,2407.26 317 | 50,83,3881.39 318 | 98,21,379.99 319 | 16,55,3885.44 320 | 37,4,3503.34 321 | 12,27,4460.92 322 | 14,76,3715.61 323 | 59,79,3519.18 324 | 56,29,6737.66 325 | 37,93,245.89 326 | 58,44,2342.51 327 | 72,45,4107.71 328 | 85,18,469.13 329 | 60,88,6138.89 330 | 5,31,3496.03 331 | 44,51,6288.66 332 | 44,48,4961.8 333 | 94,84,4546.69 334 | 90,88,6897.34 335 | 98,84,3769.56 336 | 35,30,1516.48 337 | 26,90,2178.52 338 | 89,29,3045.05 339 | 21,43,6424.07 340 | 50,65,944.13 341 | 85,61,6242.66 342 | 69,25,4704.64 343 | 62,92,4089.39 344 | 37,21,5864.69 345 | 42,55,4365.93 346 | 70,50,7222.48 347 | 22,9,3745.21 348 | 79,98,1695.95 349 | 32,3,961.59 350 | 89,82,6495.11 351 | 3,33,1877.54 352 | 17,32,1743.56 353 | 62,98,6288.62 354 | 2,41,6773.79 355 | 9,73,7340.98 356 | 2,81,2206.14 357 | 99,42,5836.3 358 | 94,63,7534.8 359 | 80,50,5184.45 360 | 43,55,5793.26 361 | 97,7,3082.82 362 | 2,30,2370.96 363 | 61,31,4233.43 364 | 24,50,4837.27 365 | 74,80,2129.32 366 | 15,52,3390.36 367 | 45,90,611.53 368 | 3,65,146.17 369 | 16,30,4483.6 370 | 54,85,7694.97 371 | 56,8,3454.38 372 | 36,29,2664.8 373 | 50,6,3892.72 374 | 85,36,5430.05 375 | 81,63,4444.85 376 | 25,68,571.53 377 | 98,62,3584.87 378 | 61,98,4123.04 379 | 96,25,6499.07 380 | 85,56,5987.6 381 | 8,88,5754.48 382 | 23,86,1649.31 383 | 99,5,3675.41 384 | 95,2,6632.29 385 | 23,60,6751.14 386 | 60,26,3586.84 387 | 14,25,4766.8 388 | 63,4,7132.86 389 | 27,53,7733.73 390 | 15,26,7811.72 391 | 66,19,6367.79 392 | 17,13,3212.87 393 | 73,38,3495.96 394 | 96,65,3027.68 395 | 15,87,1601.39 396 | 58,95,7339.46 397 | 20,98,358.94 398 | 11,31,7451.66 399 | 45,63,453.03 400 | 84,25,4389.43 401 | 77,2,4716.72 402 | 31,44,2489.17 403 | 65,73,1995.51 404 | 57,59,7487.2 405 | 48,85,2413.12 406 | 53,27,6828.98 407 | 36,2,1919.75 408 | 86,38,2964.14 409 | 86,50,1873.16 410 | 99,47,1162.62 411 | 76,2,1759.21 412 | 62,51,2403.93 413 | 38,85,2050.75 414 | 73,56,4539.84 415 | 23,33,3940.41 416 | 1,5,5844.29 417 | 83,87,892.6 418 | 66,28,464.67 419 | 33,50,6300.63 420 | 73,16,7946.64 421 | 81,86,6765.54 422 | 45,7,3489.97 423 | 62,95,5470.25 424 | 24,12,4166.61 425 | 86,4,2752.29 426 | 15,43,426.74 427 | 25,59,5456.87 428 | 92,50,2035.17 429 | 76,84,6672.9 430 | 39,62,7810.3 431 | 4,79,1121.99 432 | 53,23,7.47 433 | 16,99,6280.74 434 | 28,16,5907.55 435 | 51,10,91.63 436 | 45,92,1897.87 437 | 72,43,5680.28 438 | 68,61,1883.24 439 | 55,14,2752.42 440 | 70,99,6887.0 441 | 59,23,4899.91 442 | 23,41,3477.42 443 | 48,15,2060.13 444 | 25,8,2103.0 445 | 91,73,3551.46 446 | 4,91,137.48 447 | 18,13,1313.11 448 | 83,40,737.57 449 | 85,58,61.49 450 | 89,5,6076.57 451 | 25,67,3169.31 452 | 29,52,532.91 453 | 50,9,3599.7 454 | 10,70,627.81 455 | 41,10,3631.08 456 | 14,93,443.61 457 | 79,74,2840.46 458 | 97,36,3595.98 459 | 44,22,1988.62 460 | 51,24,1395.96 461 | 27,61,4187.33 462 | 34,8,342.24 463 | 16,70,7723.02 464 | 16,44,4307.43 465 | 98,97,325.48 466 | 3,99,4385.56 467 | 6,62,3479.62 468 | 63,7,979.28 469 | 9,68,215.02 470 | 90,89,4970.03 471 | 8,20,3360.57 472 | 8,76,3969.81 473 | 80,59,3666.92 474 | 25,7,4642.91 475 | 62,30,2373.83 476 | 89,83,1505.73 477 | 95,29,4724.83 478 | 45,98,1574.65 479 | 80,38,4136.46 480 | 33,42,1001.56 481 | 88,38,5414.3 482 | 82,1,5306.29 483 | 69,89,2232.77 484 | 69,79,2808.0 485 | 95,57,491.93 486 | 98,94,5746.38 487 | 81,63,6843.16 488 | 51,26,5069.17 489 | 49,30,1630.63 490 | 8,8,1469.38 491 | 1,83,3028.81 492 | 57,33,6789.73 493 | 30,75,2634.98 494 | 14,97,4254.71 495 | 89,100,3785.97 496 | 36,89,3793.76 497 | 84,27,7271.44 498 | 98,54,4613.34 499 | 78,87,4945.73 500 | 20,44,4365.07 501 | 79,92,3814.03 502 | 34,31,5361.9 503 | 41,51,6258.09 504 | 28,36,1185.97 505 | 13,87,5876.66 506 | 73,9,7891.73 507 | 32,29,738.24 508 | 77,19,4435.25 509 | 16,18,1889.28 510 | 79,57,1330.3 511 | 12,83,7831.73 512 | 93,25,1326.52 513 | 79,97,3660.22 514 | 73,4,6976.06 515 | 58,88,1237.15 516 | 44,20,7311.41 517 | 48,100,4972.14 518 | 28,8,5873.86 519 | 93,40,7873.86 520 | 34,48,1167.83 521 | 3,82,1877.21 522 | 11,98,5442.56 523 | 85,83,5703.57 524 | 63,65,2270.22 525 | 28,12,5283.47 526 | 54,32,7955.69 527 | 29,48,2005.83 528 | 24,67,7590.67 529 | 8,64,208.48 530 | 78,93,4284.12 531 | 49,24,6424.09 532 | 34,85,1184.83 533 | 44,36,7688.81 534 | 22,99,1126.71 535 | 25,73,682.81 536 | 57,40,221.01 537 | 28,35,6922.65 538 | 96,62,5150.82 539 | 8,7,3476.35 540 | 82,60,3644.0 541 | 23,39,5757.32 542 | 63,36,2771.87 543 | 20,3,4267.12 544 | 81,59,2261.26 545 | 72,1,3831.88 546 | 40,91,3416.75 547 | 6,78,4773.87 548 | 8,15,3195.16 549 | 24,1,6453.67 550 | 30,78,4774.65 551 | 51,56,7127.28 552 | 54,29,6651.3 553 | 100,36,150.2 554 | 97,1,1934.67 555 | 32,72,5657.7 556 | 80,73,6529.34 557 | 91,69,7861.45 558 | 11,72,3031.15 559 | 70,83,2952.55 560 | 89,39,4689.95 561 | 8,67,4921.96 562 | 72,8,5341.77 563 | 43,66,3301.95 564 | 37,43,6552.31 565 | 87,71,3116.01 566 | 76,6,4472.18 567 | 29,99,294.23 568 | 16,6,7492.6 569 | 40,66,700.63 570 | 54,94,2731.52 571 | 11,31,1951.1 572 | 32,52,3903.82 573 | 32,94,5591.52 574 | 34,90,2028.19 575 | 71,67,7973.68 576 | 36,16,7651.42 577 | 3,77,987.37 578 | 69,100,908.5 579 | 90,67,6834.59 580 | 88,74,1053.42 581 | 36,95,2530.95 582 | 61,63,1583.16 583 | 21,60,1918.76 584 | 13,37,2283.6 585 | 34,100,7471.87 586 | 85,83,4503.19 587 | 71,26,6596.98 588 | 85,51,5547.77 589 | 49,59,6343.41 590 | 74,68,162.26 591 | 57,8,4825.45 592 | 2,81,7956.77 593 | 62,43,417.07 594 | 21,7,3259.79 595 | 21,98,6365.04 596 | 45,82,2595.3 597 | 3,97,2330.02 598 | 50,47,7146.9 599 | 14,13,5002.62 600 | 85,11,2159.15 601 | 25,9,3881.56 602 | 82,20,5697.32 603 | 38,39,4424.88 604 | 65,30,6375.75 605 | 95,80,3940.1 606 | 9,95,2636.55 607 | 31,20,3008.74 608 | 68,30,5650.69 609 | 15,30,3160.45 610 | 33,69,6512.0 611 | 11,96,4971.14 612 | 100,77,1974.85 613 | 81,69,4914.6 614 | 32,17,7227.43 615 | 17,95,5197.5 616 | 22,66,281.34 617 | 43,71,5391.41 618 | 45,35,6045.0 619 | 44,46,6272.67 620 | 89,86,41.85 621 | 96,10,1203.79 622 | 85,45,2379.21 623 | 69,95,5494.91 624 | 14,7,4625.96 625 | 50,95,806.38 626 | 32,75,2965.42 627 | 67,7,3325.22 628 | 96,46,4141.15 629 | 19,86,4057.36 630 | 32,50,4153.52 631 | 36,26,2162.21 632 | 55,74,901.46 633 | 26,80,3172.35 634 | 79,48,2803.35 635 | 67,47,3588.83 636 | 87,59,6429.86 637 | 20,5,3932.97 638 | 80,31,4022.11 639 | 25,22,7131.94 640 | 28,31,1977.66 641 | 40,92,6900.16 642 | 19,35,1618.96 643 | 26,24,4147.87 644 | 27,42,1017.14 645 | 76,29,4691.87 646 | 36,73,7059.7 647 | 52,48,5357.07 648 | 79,40,5284.42 649 | 1,10,671.12 650 | 47,86,514.59 651 | 5,71,4979.55 652 | 68,43,941.07 653 | 29,93,157.72 654 | 31,88,6471.35 655 | 89,8,200.49 656 | 87,87,3328.3 657 | 85,32,1084.62 658 | 13,31,1409.48 659 | 73,97,4969.38 660 | 91,36,3410.66 661 | 17,7,7083.09 662 | 83,83,2094.3 663 | 96,48,388.79 664 | 66,100,5160.19 665 | 12,80,4892.39 666 | 78,7,7955.4 667 | 53,22,5124.43 668 | 63,75,6863.58 669 | 97,21,4491.16 670 | 5,18,5079.46 671 | 7,58,3582.78 672 | 47,29,2531.36 673 | 20,13,7847.95 674 | 37,90,2488.75 675 | 53,91,7837.13 676 | 75,79,2719.12 677 | 18,25,7715.72 678 | 40,10,7333.7 679 | 29,17,313.15 680 | 74,58,5588.09 681 | 19,11,5004.73 682 | 63,55,5877.77 683 | 25,55,7872.71 684 | 87,4,3997.21 685 | 4,14,3433.6 686 | 28,98,137.92 687 | 85,33,4627.47 688 | 48,85,1112.08 689 | 3,59,1250.04 690 | 77,14,7552.12 691 | 10,90,4995.49 692 | 92,1,2038.96 693 | 55,52,6847.05 694 | 76,37,1270.11 695 | 81,68,4314.16 696 | 52,76,1448.92 697 | 55,65,3267.46 698 | 16,25,7182.64 699 | 33,36,2878.57 700 | 87,10,2578.22 701 | 99,16,976.84 702 | 15,80,7754.59 703 | 6,61,445.88 704 | 1,60,5994.88 705 | 25,40,6847.98 706 | 98,73,927.39 707 | 66,88,7780.18 708 | 81,95,3741.62 709 | 51,77,6203.39 710 | 21,84,5904.56 711 | 72,34,6026.37 712 | 73,9,1409.96 713 | 37,62,7966.84 714 | 48,54,2422.39 715 | 29,17,5979.96 716 | 11,58,7791.56 717 | 49,14,2420.57 718 | 44,71,975.63 719 | 70,24,1976.98 720 | 100,7,7850.68 721 | 77,55,2587.27 722 | 7,74,488.44 723 | 72,27,3693.25 724 | 1,41,6829.5 725 | 59,58,3719.3 726 | 84,8,4807.06 727 | 52,91,7709.85 728 | 9,9,5974.18 729 | 17,72,5702.13 730 | 19,81,7173.95 731 | 15,27,49.01 732 | 89,44,5337.76 733 | 72,94,1685.04 734 | 86,66,1457.03 735 | 43,47,222.99 736 | 30,57,2482.78 737 | 100,87,3469.1 738 | 50,72,1908.75 739 | 55,82,6981.8 740 | 100,85,5236.21 741 | 5,49,4786.76 742 | 33,19,3244.39 743 | 67,93,3067.19 744 | 69,47,3265.74 745 | 17,35,5858.69 746 | 99,99,163.28 747 | 96,61,2009.97 748 | 18,91,7989.65 749 | 39,7,4700.34 750 | 17,20,3263.13 751 | 77,14,4960.88 752 | 14,91,183.92 753 | 59,55,7660.15 754 | 76,65,954.38 755 | 55,7,375.34 756 | 5,7,2744.81 757 | 99,42,2946.38 758 | 46,84,6258.07 759 | 97,13,1856.6 760 | 15,2,7910.93 761 | 75,47,2598.86 762 | 81,48,5572.1 763 | 88,82,2343.22 764 | 1,60,872.32 765 | 70,46,3307.41 766 | 65,90,30.58 767 | 41,48,4915.78 768 | 19,76,3207.96 769 | 83,4,5813.81 770 | 67,69,4689.18 771 | 50,48,4466.63 772 | 48,51,6620.21 773 | 52,64,2943.21 774 | 35,37,1295.33 775 | 49,27,2255.83 776 | 8,96,5121.17 777 | 81,36,1371.72 778 | 21,53,1510.38 779 | 15,41,3806.84 780 | 78,40,2199.05 781 | 63,69,7745.47 782 | 10,17,50.63 783 | 8,63,4504.57 784 | 2,38,3409.53 785 | 61,2,7712.33 786 | 90,84,248.91 787 | 72,61,2083.39 788 | 64,93,6769.83 789 | 79,43,7245.97 790 | 92,98,4497.39 791 | 97,61,2342.1 792 | 8,4,1241.51 793 | 88,1,5904.53 794 | 83,57,5055.64 795 | 23,49,5275.03 796 | 53,25,1075.1 797 | 2,45,1572.65 798 | 1,72,2595.1 799 | 57,51,168.77 800 | 89,33,3560.29 801 | 79,78,3826.58 802 | 68,31,3460.84 803 | 92,38,2867.79 804 | 5,29,4166.23 805 | 14,29,7300.37 806 | 92,22,3381.22 807 | 90,69,4453.7 808 | 34,75,6441.89 809 | 65,48,4032.29 810 | 72,78,7154.38 811 | 76,36,5626.27 812 | 92,32,3093.65 813 | 53,27,5285.34 814 | 59,42,3632.19 815 | 5,84,2468.95 816 | 32,69,3576.19 817 | 18,56,3653.09 818 | 84,61,7565.48 819 | 88,77,7540.99 820 | 41,94,454.91 821 | 100,11,3802.75 822 | 32,85,3650.91 823 | 76,39,6581.9 824 | 33,48,3810.66 825 | 38,29,4965.21 826 | 30,29,4375.52 827 | 63,98,1258.42 828 | 18,77,5983.83 829 | 42,22,316.9 830 | 41,12,7674.2 831 | 91,96,7527.03 832 | 25,51,2038.07 833 | 63,50,2562.85 834 | 95,40,3588.82 835 | 25,30,940.1 836 | 15,80,218.1 837 | 42,94,7673.09 838 | 17,51,119.22 839 | 17,80,4899.63 840 | 79,70,4195.84 841 | 88,54,677.2 842 | 53,95,4311.38 843 | 97,85,1137.9 844 | 88,74,2819.31 845 | 60,12,7544.32 846 | 79,100,1956.69 847 | 22,74,913.56 848 | 39,3,1660.64 849 | 93,58,3862.23 850 | 83,29,717.98 851 | 8,71,2503.15 852 | 48,33,7278.0 853 | 91,9,1281.76 854 | 73,84,7759.45 855 | 30,83,3007.75 856 | 96,63,3517.64 857 | 23,33,3979.85 858 | 22,34,2208.46 859 | 27,2,2322.54 860 | 78,27,1948.67 861 | 1,62,2860.31 862 | 68,30,6531.02 863 | 98,92,2407.45 864 | 42,37,7408.33 865 | 93,84,7864.22 866 | 55,91,2592.99 867 | 32,27,1037.61 868 | 20,38,4451.92 869 | 35,50,3180.65 870 | 7,57,3043.65 871 | 73,99,6133.76 872 | 54,52,2030.85 873 | 41,22,6594.39 874 | 60,21,5400.32 875 | 26,50,5100.77 876 | 46,8,6443.45 877 | 32,35,4316.55 878 | 67,25,5987.67 879 | 2,62,1050.34 880 | 35,86,7637.55 881 | 89,71,4062.44 882 | 63,59,7212.9 883 | 38,98,7265.63 884 | 80,43,7858.4 885 | 79,37,5108.6 886 | 78,47,2363.23 887 | 68,63,6083.89 888 | 84,33,6042.0 889 | 48,60,1290.45 890 | 53,33,6514.5 891 | 85,39,6986.77 892 | 65,78,4254.29 893 | 81,42,2528.48 894 | 29,85,243.45 895 | 47,39,3401.77 896 | 22,62,4272.37 897 | 58,8,6684.63 898 | 32,98,2620.58 899 | 57,67,7766.6 900 | 52,22,6695.78 901 | 88,49,3157.64 902 | 28,50,5011.51 903 | 39,18,2300.54 904 | 51,33,5920.65 905 | 43,29,6184.38 906 | 62,1,6363.5 907 | 28,80,6973.57 908 | 82,85,3185.92 909 | 60,69,7643.21 910 | 66,39,3850.39 911 | 24,83,2880.66 912 | 38,56,2083.08 913 | 21,23,7568.26 914 | 13,83,5910.55 915 | 43,93,2402.02 916 | 83,100,320.65 917 | 88,23,7188.14 918 | 14,21,5987.06 919 | 16,14,6312.79 920 | 64,4,6469.61 921 | 7,54,649.47 922 | 27,12,4674.06 923 | 1,32,1413.95 924 | 49,99,380.91 925 | 64,9,1915.3 926 | 22,74,6231.73 927 | 65,87,3506.38 928 | 18,86,6976.95 929 | 22,99,483.03 930 | 25,51,4080.6 931 | 88,91,7133.25 932 | 53,42,4974.73 933 | 47,20,7685.62 934 | 1,47,7616.57 935 | 63,9,2652.45 936 | 51,33,487.94 937 | 19,33,7755.32 938 | 12,99,2796.98 939 | 92,95,2981.34 940 | 52,2,2277.38 941 | 45,3,1099.21 942 | 38,11,3158.16 943 | 2,71,3551.3 944 | 60,16,768.59 945 | 80,8,4414.31 946 | 23,7,5568.51 947 | 48,90,2036.26 948 | 34,3,312.75 949 | 5,6,173.1 950 | 57,54,4811.55 951 | 68,5,481.62 952 | 69,42,3973.92 953 | 55,84,7673.95 954 | 1,10,6184.86 955 | 35,45,1383.54 956 | 97,17,3996.98 957 | 68,37,4654.84 958 | 39,9,1149.83 959 | 17,73,7603.53 960 | 20,62,3557.2 961 | 66,63,6723.88 962 | 58,52,1116.6 963 | 27,6,1150.37 964 | 43,82,1733.79 965 | 70,77,786.56 966 | 89,28,717.23 967 | 92,4,6771.87 968 | 17,79,6897.55 969 | 97,70,7959.64 970 | 42,1,6517.99 971 | 2,64,4187.87 972 | 49,20,2324.87 973 | 44,68,6673.38 974 | 48,23,4584.81 975 | 86,49,415.33 976 | 13,35,244.74 977 | 61,37,1659.5 978 | 23,39,1030.24 979 | 56,75,7578.59 980 | 92,90,6053.21 981 | 22,3,5445.73 982 | 82,7,2981.68 983 | 55,82,5110.97 984 | 19,71,6487.97 985 | 97,14,170.73 986 | 80,69,4368.61 987 | 96,11,770.89 988 | 74,3,3363.74 989 | 86,62,6510.83 990 | 85,15,7434.08 991 | 75,78,714.59 992 | 63,85,7240.44 993 | 45,28,2413.94 994 | 63,10,6163.54 995 | 38,98,6115.79 996 | 41,78,2896.56 997 | 72,90,5129.5 998 | 36,13,2716.05 999 | 48,88,4983.28 1000 | 16,41,55.83 1001 | 11,12,7937.53 1002 | -------------------------------------------------------------------------------- /sample_2.csv: -------------------------------------------------------------------------------- 1 | user_id,transfer_to,amount 2 | 96,23,9601.27 3 | 37,71,2713.79 4 | 59,71,8859.11 5 | 32,62,5871.72 6 | 74,6,5303.36 7 | 90,100,2313.15 8 | 50,97,8564.85 9 | 6,77,5038.53 10 | 13,6,9468.3 11 | 58,43,3264.38 12 | 7,92,2860.72 13 | 22,88,9518.23 14 | 97,84,7159.78 15 | 34,70,5095.22 16 | 88,30,11492.75 17 | 33,22,3504.94 18 | 11,48,3020.09 19 | 35,80,4247.46 20 | 12,63,7367.19 21 | 62,48,9505.61 22 | 21,78,4217.51 23 | 44,40,10282.87 24 | 3,69,5707.63 25 | 18,60,11890.66 26 | 85,2,3093.61 27 | 64,8,11799.46 28 | 27,68,10333.37 29 | 84,75,9837.43 30 | 57,38,6520.76 31 | 10,71,10487.99 32 | 52,3,5228.84 33 | 49,77,790.51 34 | 12,93,10448.09 35 | 30,79,1908.25 36 | 95,95,3341.89 37 | 39,7,11221.21 38 | 4,32,7989.97 39 | 65,85,9330.86 40 | 12,15,9570.11 41 | 92,94,294.39 42 | 57,35,2839.47 43 | 56,13,1201.89 44 | 4,50,7588.03 45 | 74,7,4635.98 46 | 1,22,7726.21 47 | 30,97,11470.83 48 | 63,92,11770.62 49 | 76,74,9883.33 50 | 66,46,7027.67 51 | 85,55,5252.52 52 | 75,3,6274.07 53 | 51,14,874.2 54 | 33,48,2733.16 55 | 69,55,5062.53 56 | 5,78,10127.08 57 | 46,92,2638.45 58 | 18,90,2670.01 59 | 24,12,9793.87 60 | 65,79,3565.25 61 | 38,47,3289.85 62 | 13,96,1934.2 63 | 12,63,9627.0 64 | 34,55,7588.04 65 | 21,29,2617.79 66 | 59,69,758.46 67 | 29,76,4202.24 68 | 45,59,7040.71 69 | 66,52,10602.36 70 | 30,59,10043.77 71 | 48,93,1149.89 72 | 20,54,5593.13 73 | 57,8,1741.87 74 | 94,93,9961.14 75 | 66,43,1163.93 76 | 7,8,10613.01 77 | 57,40,950.51 78 | 75,20,11655.44 79 | 100,81,531.36 80 | 6,76,10463.12 81 | 95,62,5514.31 82 | 84,10,4386.16 83 | 18,39,3299.35 84 | 23,66,8341.47 85 | 53,71,8355.07 86 | 71,54,8603.66 87 | 82,77,4370.65 88 | 99,90,2649.15 89 | 15,99,10757.76 90 | 4,76,926.87 91 | 65,64,9544.44 92 | 90,41,7497.46 93 | 73,72,6872.03 94 | 81,90,10091.47 95 | 64,59,4444.97 96 | 85,56,4600.08 97 | 66,52,5492.4 98 | 97,26,10077.22 99 | 20,79,3292.4 100 | 97,95,6624.16 101 | 63,54,6407.73 102 | 8,72,510.99 103 | 69,2,8918.7 104 | 2,13,2829.78 105 | 37,34,10121.81 106 | 46,81,10321.03 107 | 24,97,6170.55 108 | 74,55,5095.67 109 | 51,99,2845.25 110 | 14,41,7382.77 111 | 11,5,9498.29 112 | 41,88,10268.84 113 | 56,15,2770.91 114 | 32,70,5398.62 115 | 32,12,2227.0 116 | 30,47,10573.86 117 | 43,29,8311.09 118 | 47,93,1377.25 119 | 81,69,2837.35 120 | 73,68,4873.95 121 | 13,97,5797.29 122 | 60,53,5803.4 123 | 81,33,11283.85 124 | 98,10,2920.05 125 | 69,32,4076.37 126 | 88,68,6885.31 127 | 51,23,647.88 128 | 94,100,4062.42 129 | 96,66,1925.78 130 | 2,12,2720.99 131 | 87,64,624.07 132 | 62,1,10431.47 133 | 81,70,7954.14 134 | 6,59,6470.9 135 | 96,14,5833.52 136 | 92,38,7810.06 137 | 11,7,666.46 138 | 85,10,5975.87 139 | 24,96,11257.78 140 | 16,78,10372.86 141 | 97,37,739.93 142 | 11,14,3510.1 143 | 55,80,7781.73 144 | 45,7,1233.25 145 | 65,83,620.25 146 | 19,89,413.98 147 | 87,24,1844.0 148 | 32,66,3496.17 149 | 20,80,7323.38 150 | 94,21,10039.66 151 | 15,38,6095.44 152 | 87,2,7032.74 153 | 81,27,8510.8 154 | 80,10,7435.43 155 | 100,44,9263.4 156 | 86,14,7160.55 157 | 95,75,3973.54 158 | 8,15,11020.06 159 | 88,68,2704.26 160 | 56,82,8010.03 161 | 87,27,11038.85 162 | 50,15,2886.55 163 | 83,66,7038.95 164 | 15,77,10506.45 165 | 14,31,8061.65 166 | 58,49,6054.96 167 | 78,22,11998.43 168 | 22,71,3948.41 169 | 48,76,8052.51 170 | 62,95,10778.66 171 | 16,81,29.61 172 | 92,31,3961.11 173 | 29,46,2493.67 174 | 17,89,11686.02 175 | 55,98,1528.82 176 | 20,82,1009.31 177 | 15,88,9130.02 178 | 76,34,8477.1 179 | 100,89,6659.95 180 | 5,93,7645.69 181 | 78,12,2274.0 182 | 31,13,9493.11 183 | 60,9,7452.13 184 | 100,93,5677.0 185 | 54,91,917.84 186 | 60,17,2427.01 187 | 93,68,3695.73 188 | 89,98,9285.21 189 | 14,19,4350.95 190 | 49,25,10504.63 191 | 29,39,5468.98 192 | 87,89,4492.98 193 | 90,84,11573.33 194 | 36,18,10275.51 195 | 100,69,4445.68 196 | 63,89,9234.9 197 | 90,28,6154.81 198 | 71,63,9229.05 199 | 54,21,2505.54 200 | 45,84,3824.15 201 | 92,46,5275.41 202 | 14,43,5282.19 203 | 47,54,1508.05 204 | 31,49,8309.17 205 | 78,66,11148.6 206 | 96,9,4277.83 207 | 58,36,879.38 208 | 69,51,9388.19 209 | 19,97,5511.39 210 | 78,13,9471.66 211 | 43,39,2854.24 212 | 36,81,5775.14 213 | 97,10,7083.27 214 | 14,77,7745.08 215 | 46,85,2985.29 216 | 28,73,9584.45 217 | 47,32,1684.14 218 | 63,74,10528.1 219 | 54,53,8950.88 220 | 97,96,7356.97 221 | 31,12,6136.54 222 | 71,3,9286.82 223 | 57,74,6785.76 224 | 75,92,2492.99 225 | 62,43,7568.92 226 | 13,72,1597.0 227 | 54,56,4603.39 228 | 37,7,5651.19 229 | 29,55,11796.85 230 | 75,30,6197.42 231 | 68,67,8058.25 232 | 9,88,10257.16 233 | 73,35,1162.81 234 | 8,43,1757.81 235 | 52,96,4145.06 236 | 89,90,6919.96 237 | 87,66,5071.56 238 | 17,11,10600.0 239 | 54,29,5874.08 240 | 35,17,6066.11 241 | 9,56,3522.31 242 | 22,83,10386.43 243 | 52,53,3669.14 244 | 86,48,11875.0 245 | 69,13,2612.75 246 | 95,41,10654.18 247 | 73,19,4803.75 248 | 67,30,10966.13 249 | 91,41,5005.62 250 | 2,80,4587.92 251 | 17,39,6537.56 252 | 1,75,5769.63 253 | 65,61,10043.48 254 | 75,27,7475.64 255 | 31,19,2774.74 256 | 38,77,615.53 257 | 27,15,4570.39 258 | 4,43,6061.07 259 | 54,34,7209.64 260 | 77,7,7133.84 261 | 32,60,6044.43 262 | 31,58,7874.37 263 | 74,64,2709.97 264 | 63,68,3016.32 265 | 98,6,878.34 266 | 76,91,8413.04 267 | 72,11,383.13 268 | 9,31,1790.46 269 | 33,85,4620.22 270 | 51,29,7892.62 271 | 55,68,9467.09 272 | 2,57,3327.64 273 | 20,65,6143.4 274 | 95,21,8004.79 275 | 72,90,2935.94 276 | 24,27,6670.2 277 | 40,2,6071.22 278 | 67,2,6926.51 279 | 7,50,8698.56 280 | 39,52,6515.72 281 | 41,6,190.34 282 | 35,18,8676.93 283 | 28,50,484.27 284 | 87,16,5519.59 285 | 62,48,6629.7 286 | 35,36,850.6 287 | 56,64,11724.16 288 | 31,18,1483.56 289 | 42,31,10912.34 290 | 41,92,6107.62 291 | 47,46,11223.95 292 | 2,28,835.82 293 | 51,1,1790.27 294 | 70,91,436.44 295 | 2,28,56.98 296 | 43,92,10723.04 297 | 61,5,8946.21 298 | 11,26,11572.32 299 | 90,26,8735.04 300 | 52,88,1633.4 301 | 57,69,3165.94 302 | 66,63,2107.76 303 | 32,100,9866.72 304 | 48,7,3882.27 305 | 6,36,6759.44 306 | 85,81,9185.6 307 | 8,31,8196.46 308 | 81,10,613.62 309 | 71,45,8340.82 310 | 52,34,9981.19 311 | 78,62,6502.51 312 | 63,49,4994.44 313 | 94,12,9109.84 314 | 20,89,5696.22 315 | 76,88,1011.86 316 | 95,70,7764.39 317 | 54,1,6844.23 318 | 71,9,549.1 319 | 90,13,8342.0 320 | 99,28,2181.06 321 | 8,10,9146.26 322 | 76,20,7873.42 323 | 89,95,3141.75 324 | 76,35,11495.8 325 | 64,9,5375.9 326 | 11,36,4560.72 327 | 1,63,1427.75 328 | 82,65,11707.0 329 | 89,49,9664.07 330 | 34,91,6441.02 331 | 53,95,2832.68 332 | 20,64,2936.25 333 | 22,16,5358.91 334 | 22,96,7137.66 335 | 22,46,4034.71 336 | 23,27,10413.87 337 | 27,6,3469.3 338 | 93,6,821.03 339 | 29,85,6289.65 340 | 12,59,7115.92 341 | 68,42,4269.73 342 | 13,72,11023.23 343 | 8,78,1814.03 344 | 91,96,1752.06 345 | 99,9,3090.47 346 | 100,33,4241.24 347 | 95,20,11235.99 348 | 1,80,9442.09 349 | 56,1,1991.6 350 | 40,95,5594.53 351 | 87,19,744.39 352 | 84,2,10238.04 353 | 92,41,9901.62 354 | 40,72,6737.79 355 | 59,78,11343.79 356 | 68,54,2373.91 357 | 40,26,5892.45 358 | 29,24,10821.93 359 | 59,6,2785.18 360 | 79,5,1242.37 361 | 58,54,607.33 362 | 7,53,872.37 363 | 69,52,8376.25 364 | 69,24,4019.37 365 | 41,34,5848.45 366 | 82,30,7069.14 367 | 2,34,9094.79 368 | 52,96,11975.17 369 | 8,9,7225.87 370 | 8,66,2199.5 371 | 76,96,1803.2 372 | 17,9,2123.92 373 | 97,80,10451.17 374 | 62,49,2637.06 375 | 2,57,2220.08 376 | 17,97,7802.5 377 | 81,18,4433.95 378 | 75,67,7889.03 379 | 95,5,8354.62 380 | 74,2,11418.78 381 | 43,2,10904.83 382 | 99,12,7240.04 383 | 56,100,6050.66 384 | 4,51,9312.12 385 | 88,60,2848.86 386 | 67,22,2722.6 387 | 56,38,9036.65 388 | 58,73,3734.18 389 | 39,20,549.11 390 | 48,65,6684.61 391 | 3,58,6538.95 392 | 71,53,5258.34 393 | 86,85,11214.21 394 | 57,59,9075.2 395 | 81,52,3586.53 396 | 18,18,9475.08 397 | 22,98,10468.59 398 | 45,28,5891.4 399 | 87,43,8993.86 400 | 25,81,9969.61 401 | 94,58,2916.72 402 | 55,25,7257.15 403 | 3,71,8339.53 404 | 66,9,5788.75 405 | 92,14,7150.52 406 | 64,92,3787.01 407 | 9,77,7198.19 408 | 93,53,10766.46 409 | 37,75,225.97 410 | 22,49,6095.37 411 | 37,23,2004.71 412 | 13,79,4861.77 413 | 14,25,5191.0 414 | 44,25,11293.69 415 | 86,36,6002.45 416 | 76,15,3050.33 417 | 5,76,5788.12 418 | 28,87,5496.55 419 | 67,89,6709.9 420 | 77,71,1016.5 421 | 75,96,4572.73 422 | 40,49,8106.64 423 | 70,89,8312.24 424 | 59,54,1328.9 425 | 81,47,2206.81 426 | 8,15,9560.28 427 | 22,34,3336.49 428 | 64,50,9489.11 429 | 68,39,8714.47 430 | 92,41,2960.47 431 | 90,19,1806.64 432 | 88,8,8010.04 433 | 14,80,7841.3 434 | 85,6,11477.49 435 | 25,14,11551.31 436 | 25,12,9008.17 437 | 74,2,7218.98 438 | 93,81,746.66 439 | 45,77,10522.92 440 | 18,56,6960.36 441 | 60,50,4837.93 442 | 34,33,11362.84 443 | 1,79,10625.13 444 | 17,15,8507.66 445 | 83,52,1798.68 446 | 91,31,8835.42 447 | 89,39,10701.09 448 | 38,3,4505.09 449 | 2,66,3142.22 450 | 34,91,6487.07 451 | 34,51,10216.07 452 | 99,5,9959.6 453 | 19,55,3096.6 454 | 83,77,8103.28 455 | 91,16,3465.21 456 | 60,88,4111.36 457 | 7,29,10443.98 458 | 72,62,143.51 459 | 26,51,779.99 460 | 51,83,7402.24 461 | 40,33,10903.54 462 | 21,85,8779.47 463 | 8,3,4760.65 464 | 85,93,5072.66 465 | 68,73,2281.84 466 | 35,90,1786.5 467 | 43,97,2974.25 468 | 97,12,2285.29 469 | 6,83,580.27 470 | 16,43,418.31 471 | 70,46,7040.2 472 | 76,89,2679.05 473 | 86,81,10786.58 474 | 56,49,9284.66 475 | 69,37,6834.11 476 | 64,43,3199.42 477 | 94,66,7322.96 478 | 51,37,4937.19 479 | 81,79,8350.03 480 | 58,29,1893.89 481 | 80,58,2149.51 482 | 47,78,7202.86 483 | 44,37,4669.16 484 | 24,80,5397.72 485 | 73,14,13.46 486 | 60,8,437.15 487 | 30,46,8099.83 488 | 11,21,8780.17 489 | 82,27,10620.18 490 | 14,39,8639.2 491 | 91,10,569.2 492 | 75,5,2666.97 493 | 94,51,996.07 494 | 41,26,11563.33 495 | 86,39,11496.37 496 | 52,13,11101.28 497 | 6,34,4501.08 498 | 54,9,7287.06 499 | 46,83,2434.81 500 | 34,79,6201.65 501 | 40,35,10735.15 502 | 100,74,761.35 503 | 60,5,5036.48 504 | 65,6,4608.53 505 | 90,9,6150.81 506 | 16,15,1495.12 507 | 23,9,405.62 508 | 53,69,4337.81 509 | 50,28,3273.92 510 | 75,21,11037.76 511 | 23,71,11992.33 512 | 75,66,9582.64 513 | 52,48,7549.08 514 | 5,85,7922.84 515 | 86,41,7419.23 516 | 15,29,2670.81 517 | 42,22,4843.01 518 | 83,10,890.42 519 | 56,49,833.39 520 | 91,89,1372.34 521 | 37,34,10551.11 522 | 11,66,7733.3 523 | 4,89,6271.06 524 | 13,94,2210.1 525 | 62,26,9563.32 526 | 21,71,11750.7 527 | 15,65,3757.04 528 | 67,6,10649.12 529 | 97,6,11291.62 530 | 86,3,10854.51 531 | 63,56,11406.4 532 | 88,68,343.79 533 | 14,47,204.88 534 | 5,42,10113.37 535 | 63,50,4357.22 536 | 87,21,6037.56 537 | 17,96,1097.56 538 | 81,91,2386.87 539 | 6,49,8258.04 540 | 87,93,3987.86 541 | 77,52,8013.63 542 | 71,76,5516.49 543 | 70,21,9095.59 544 | 87,15,10538.6 545 | 47,68,6880.51 546 | 51,77,6425.58 547 | 49,25,8896.81 548 | 9,97,7513.33 549 | 67,97,2994.29 550 | 32,99,5872.68 551 | 67,87,11760.22 552 | 63,32,5201.28 553 | 73,100,1710.04 554 | 91,89,11922.93 555 | 4,70,5210.38 556 | 70,52,3779.88 557 | 71,79,1785.34 558 | 6,66,2982.71 559 | 4,96,5473.43 560 | 15,35,1429.19 561 | 34,71,2372.25 562 | 86,31,1304.11 563 | 85,91,8186.22 564 | 57,44,6745.72 565 | 96,93,1641.71 566 | 38,47,9536.97 567 | 53,1,11112.36 568 | 65,50,2805.29 569 | 74,51,10184.71 570 | 64,76,9555.37 571 | 43,24,11424.93 572 | 36,61,9996.59 573 | 13,82,11597.7 574 | 63,31,7290.36 575 | 80,34,6138.67 576 | 44,46,1895.06 577 | 39,26,2339.61 578 | 4,2,6371.06 579 | 60,56,2266.54 580 | 68,28,5943.45 581 | 59,74,3809.58 582 | 39,19,8524.93 583 | 82,43,6892.58 584 | 39,23,9305.19 585 | 28,73,1918.09 586 | 42,7,11110.56 587 | 55,48,1654.22 588 | 46,25,9269.58 589 | 51,21,3179.52 590 | 35,88,8537.34 591 | 25,89,7310.06 592 | 43,1,2237.55 593 | 93,96,8372.23 594 | 31,68,766.92 595 | 13,46,11594.55 596 | 11,15,8608.07 597 | 5,85,11221.16 598 | 21,30,3649.52 599 | 11,59,2623.22 600 | 6,27,5637.17 601 | 52,48,352.81 602 | 84,99,1598.87 603 | 79,97,1972.66 604 | 100,66,8947.64 605 | 13,55,8691.25 606 | 69,77,11186.42 607 | 3,69,3287.91 608 | 7,4,1375.0 609 | 1,96,5804.09 610 | 75,46,7928.15 611 | 87,2,9045.07 612 | 15,30,323.99 613 | 17,46,6688.97 614 | 49,24,10364.42 615 | 19,78,3028.73 616 | 19,60,2862.52 617 | 9,52,7946.13 618 | 93,68,8259.78 619 | 13,81,9773.77 620 | 26,10,7046.76 621 | 37,47,8197.22 622 | 30,49,9385.73 623 | 94,36,6368.23 624 | 92,59,57.11 625 | 4,90,11853.4 626 | 18,100,2452.21 627 | 16,21,5795.1 628 | 37,97,11693.84 629 | 7,54,618.8 630 | 15,60,10268.81 631 | 40,50,7429.28 632 | 40,3,11888.68 633 | 13,77,347.41 634 | 56,66,6231.45 635 | 76,38,6606.92 636 | 39,22,9423.82 637 | 78,16,11648.4 638 | 88,5,9675.74 639 | 48,71,2898.68 640 | 91,45,2115.82 641 | 70,49,3802.46 642 | 92,4,7597.92 643 | 5,53,6313.03 644 | 84,94,5489.79 645 | 97,98,1247.57 646 | 52,50,5593.67 647 | 49,66,4584.79 648 | 78,31,9252.78 649 | 60,64,11897.07 650 | 86,5,9625.99 651 | 26,78,607.97 652 | 16,45,8516.01 653 | 3,39,4769.21 654 | 28,25,858.55 655 | 74,34,8047.38 656 | 4,15,9779.55 657 | 18,90,11358.88 658 | 13,56,3082.45 659 | 69,99,2367.79 660 | 13,100,2153.5 661 | 82,60,7344.92 662 | 5,82,6128.81 663 | 72,74,9322.45 664 | 25,5,103.98 665 | 24,74,6475.6 666 | 78,22,510.6 667 | 63,86,2051.98 668 | 15,93,5747.35 669 | 19,71,4990.16 670 | 14,11,6431.75 671 | 22,57,11281.85 672 | 90,69,4225.69 673 | 11,54,6183.93 674 | 99,14,2387.39 675 | 71,50,9689.97 676 | 61,78,9149.06 677 | 77,42,1724.21 678 | 54,39,5992.6 679 | 26,17,11764.89 680 | 18,6,7153.84 681 | 93,62,1071.4 682 | 61,51,9356.14 683 | 57,30,6980.68 684 | 59,40,9011.37 685 | 63,55,3709.08 686 | 7,56,8521.99 687 | 41,10,3215.34 688 | 76,57,8107.2 689 | 9,54,5579.79 690 | 89,87,11833.39 691 | 71,1,7095.47 692 | 54,27,2849.83 693 | 66,42,9919.97 694 | 47,14,10405.14 695 | 43,92,8368.78 696 | 67,55,1816.06 697 | 62,43,7038.47 698 | 99,98,4834.43 699 | 13,53,2843.71 700 | 63,2,7300.12 701 | 50,46,4518.81 702 | 40,88,190.15 703 | 59,57,10654.06 704 | 38,28,1488.86 705 | 48,75,7626.59 706 | 41,61,642.54 707 | 36,46,4882.38 708 | 16,50,9214.9 709 | 73,34,11282.55 710 | 94,39,4820.6 711 | 87,14,11505.71 712 | 61,40,7726.02 713 | 78,11,9671.48 714 | 8,85,8497.05 715 | 93,69,9241.34 716 | 50,96,8868.14 717 | 26,8,6005.33 718 | 97,60,8698.91 719 | 61,53,2966.95 720 | 70,61,7632.2 721 | 97,13,4182.41 722 | 16,16,1531.64 723 | 82,16,11875.11 724 | 77,66,7434.43 725 | 46,53,9839.7 726 | 20,38,2160.04 727 | 92,62,10978.64 728 | 36,75,8749.87 729 | 68,46,4020.98 730 | 15,88,11741.28 731 | 80,52,2710.12 732 | 23,52,3239.52 733 | 28,40,7997.9 734 | 84,68,4262.65 735 | 46,26,10828.19 736 | 77,93,253.75 737 | 16,40,9838.57 738 | 83,85,11977.65 739 | 61,66,9341.15 740 | 62,90,11568.88 741 | 85,16,7374.38 742 | 71,36,3004.47 743 | 5,85,6476.11 744 | 44,67,6372.65 745 | 24,54,1848.36 746 | 89,69,9873.2 747 | 71,54,7578.39 748 | 11,21,4778.64 749 | 5,35,6192.01 750 | 76,51,10281.26 751 | 18,86,7752.75 752 | 37,37,5694.02 753 | 80,93,6765.41 754 | 69,7,2721.63 755 | 64,21,4262.63 756 | 71,57,9867.69 757 | 100,4,7820.06 758 | 83,98,5291.74 759 | 18,69,5696.0 760 | 45,94,5934.49 761 | 29,86,2531.01 762 | 96,22,6556.49 763 | 15,60,2264.9 764 | 64,32,9666.66 765 | 1,26,6529.93 766 | 57,6,4883.8 767 | 35,18,5846.33 768 | 6,51,7086.04 769 | 94,65,5680.5 770 | 4,45,9362.57 771 | 62,84,154.76 772 | 59,88,3785.9 773 | 65,84,11790.29 774 | 35,91,3411.57 775 | 19,35,1339.18 776 | 22,73,3182.86 777 | 93,71,1956.28 778 | 17,51,2292.2 779 | 26,41,2542.94 780 | 71,45,10058.94 781 | 47,29,3642.68 782 | 81,7,6137.51 783 | 6,7,2490.31 784 | 54,45,10813.86 785 | 91,64,7934.82 786 | 25,25,6835.69 787 | 25,77,7574.62 788 | 83,74,68.23 789 | 77,55,243.1 790 | 14,51,3110.1 791 | 18,60,7029.9 792 | 83,22,2065.49 793 | 98,91,1608.76 794 | 82,75,1192.54 795 | 74,37,14.27 796 | 61,39,8980.23 797 | 80,15,8573.31 798 | 11,58,10429.99 799 | 27,86,3243.46 800 | 14,9,3507.18 801 | 91,88,498.27 802 | 46,89,2345.96 803 | 50,48,5441.85 804 | 46,91,7248.29 805 | 27,86,3302.46 806 | 26,10,227.61 807 | 64,66,4620.22 808 | 58,59,3206.24 809 | 10,12,11153.41 810 | 17,67,6538.74 811 | 44,43,3791.16 812 | 13,22,2785.23 813 | 49,60,9963.84 814 | 30,69,10603.97 815 | 62,66,9034.92 816 | 79,62,871.2 817 | 83,90,11677.03 818 | 79,95,2713.27 819 | 81,86,1448.87 820 | 2,10,9957.27 821 | 93,8,6858.46 822 | 78,59,10573.5 823 | 81,4,10818.7 824 | 6,74,3571.31 825 | 56,49,443.33 826 | 78,37,10305.64 827 | 48,96,9657.95 828 | 30,40,10248.33 829 | 77,86,4099.55 830 | 11,43,9300.81 831 | 95,25,2672.54 832 | 98,79,3302.79 833 | 64,29,11205.89 834 | 75,37,9988.93 835 | 29,93,3954.35 836 | 92,26,4534.47 837 | 21,16,2450.13 838 | 91,58,207.77 839 | 49,72,6256.6 840 | 2,75,3835.8 841 | 56,69,377.62 842 | 50,73,9275.45 843 | 97,50,2950.61 844 | 95,55,10937.4 845 | 10,89,10102.74 846 | 9,67,6226.26 847 | 5,49,8290.85 848 | 29,51,963.01 849 | 41,75,2830.48 850 | 90,76,7020.54 851 | 7,60,4722.79 852 | 43,80,10228.59 853 | 4,22,6856.99 854 | 44,82,883.66 855 | 21,68,2367.68 856 | 7,50,10162.37 857 | 15,42,6882.6 858 | 21,81,594.79 859 | 36,72,1471.23 860 | 63,62,8663.93 861 | 97,62,8428.22 862 | 11,17,4227.9 863 | 71,62,8791.28 864 | 18,41,9606.74 865 | 46,5,1164.65 866 | 97,14,2857.64 867 | 73,79,10730.82 868 | 30,100,4164.06 869 | 86,88,5096.26 870 | 80,79,8383.09 871 | 22,66,756.83 872 | 88,49,1470.68 873 | 70,65,8427.13 874 | 31,32,7437.61 875 | 30,45,10596.47 876 | 69,73,10085.2 877 | 98,33,3171.08 878 | 74,100,11358.15 879 | 41,22,2763.77 880 | 38,77,10008.79 881 | 40,38,7894.5 882 | 100,24,11709.26 883 | 26,2,7389.58 884 | 48,28,11805.11 885 | 3,30,5057.2 886 | 13,68,6051.12 887 | 38,22,8976.57 888 | 68,6,9727.24 889 | 93,82,4943.79 890 | 78,40,7292.7 891 | 91,53,9702.67 892 | 19,99,7557.54 893 | 13,15,5122.61 894 | 39,95,2383.65 895 | 68,20,5684.57 896 | 8,70,5565.3 897 | 17,99,3176.27 898 | 42,16,4763.4 899 | 34,20,2542.4 900 | 53,58,6331.61 901 | 57,74,11758.3 902 | 3,12,7872.42 903 | 41,94,4700.7 904 | 16,25,1497.52 905 | 68,59,9631.2 906 | 24,34,10773.61 907 | 35,76,11662.49 908 | 62,47,4876.33 909 | 85,18,6494.81 910 | 3,66,7717.07 911 | 58,11,2524.02 912 | 85,36,10647.47 913 | 34,99,3141.06 914 | 82,77,10614.12 915 | 100,37,2655.51 916 | 23,43,2584.32 917 | 75,30,1973.57 918 | 33,87,9782.71 919 | 10,16,2590.61 920 | 31,46,3571.57 921 | 56,1,7571.15 922 | 19,83,9314.76 923 | 17,67,4118.8 924 | 63,29,1265.16 925 | 18,11,11598.2 926 | 34,44,9217.16 927 | 9,31,4486.75 928 | 90,10,9752.85 929 | 40,33,943.39 930 | 67,15,9505.76 931 | 37,11,5388.62 932 | 86,71,874.28 933 | 6,13,2299.99 934 | 60,66,10699.87 935 | 58,25,465.32 936 | 72,68,9362.22 937 | 38,67,8251.73 938 | 59,38,3483.95 939 | 82,88,11169.48 940 | 63,36,4733.87 941 | 75,75,6797.72 942 | 65,83,9340.05 943 | 56,22,8013.55 944 | 47,12,5366.59 945 | 100,92,2559.1 946 | 67,72,231.03 947 | 8,19,3173.88 948 | 61,32,5088.67 949 | 58,33,1958.15 950 | 36,92,11741.41 951 | 87,48,4476.53 952 | 57,22,5873.86 953 | 37,11,9371.26 954 | 23,44,10591.42 955 | 54,24,3651.56 956 | 57,86,6283.7 957 | 29,33,7516.61 958 | 99,63,8410.95 959 | 26,99,975.48 960 | 46,7,7630.22 961 | 17,73,10574.87 962 | 34,52,5537.09 963 | 31,55,6313.69 964 | 87,38,5827.21 965 | 97,69,7991.68 966 | 33,46,8123.99 967 | 75,64,10238.59 968 | 92,50,3453.58 969 | 18,96,4906.78 970 | 11,44,11192.89 971 | 67,2,3368.38 972 | 94,66,6159.26 973 | 18,1,3310.08 974 | 82,64,2151.98 975 | 40,60,9384.69 976 | 39,71,6591.62 977 | 42,5,1378.86 978 | 61,96,1547.5 979 | 44,34,4073.69 980 | 7,99,11595.96 981 | 19,46,6272.7 982 | 93,89,5649.04 983 | 19,27,11647.85 984 | 17,56,4584.95 985 | 74,52,3497.06 986 | 59,75,9142.08 987 | 59,29,5882.97 988 | 79,3,11178.11 989 | 92,55,8906.73 990 | 64,98,1267.21 991 | 89,89,2941.77 992 | 12,42,2188.91 993 | 74,51,1398.33 994 | 10,31,7636.53 995 | 85,65,9739.33 996 | 3,61,8580.69 997 | 86,13,8205.75 998 | 35,1,9221.47 999 | 99,98,526.67 1000 | 86,78,2201.69 1001 | 95,88,9449.54 1002 | --------------------------------------------------------------------------------