Skip to content

mvrpl/apache-cassandra-spring-boot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

apache-cassandra-spring-boot

Create AWS Keyspaces YAML (keyspaces.cform):

AWSTemplateFormatVersion: '2010-09-09'
Description: AWS CloudFormation template for creating an Amazon Keyspaces Keyspace and Table.

Parameters:
  KeyspaceName:
    Description: Keyspace Name
    Type: String
    NoEcho: false
    AllowedPattern: '^[a-z_]{2,31}$'
    AllowedValues:
      - mvrpl
      - mvrpl_br
      - mvrpl_dev
    ConstraintDescription: Must be a valid keyspace name.

Resources:
  MyKeyspace:
    Type: AWS::Cassandra::Keyspace
    Properties:
      KeyspaceName: !Ref KeyspaceName
      Tags:
        - Key: Environment
          Value: Dev
        - Key: Application
          Value: testes

  MyTable:
    Type: AWS::Cassandra::Table
    Properties:
      KeyspaceName: !Ref MyKeyspace
      TableName: pessoas
      PartitionKeyColumns:
        - ColumnName: id
          ColumnType: uuid
      ClusteringKeyColumns:
        - Column:
            ColumnName: criado_em
            ColumnType: DATE
          OrderBy: DESC
      RegularColumns:
        - ColumnName: nome
          ColumnType: TEXT
        - ColumnName: email
          ColumnType: TEXT
      BillingMode:
        Mode: ON_DEMAND
      DefaultTimeToLive: 60
      PointInTimeRecoveryEnabled: false
      ReplicaSpecifications:
        - Region: sa-east-1
      EncryptionSpecification:
        EncryptionType: AWS_OWNED_KMS_KEY
      Tags:
        - Key: Environment
          Value: Dev
        - Key: TablePurpose
          Value: usuarios

Outputs:
  KeyspaceName:
    Description: Keyspaces de Marcos
    Value: !Ref MyKeyspace
  TableName:
    Description: Tabela de usuários
    Value: !Ref MyTable

Run bash to create OR update resource:

aws cloudformation deploy \
--stack-name MyKeyspacesStack \
--template-file ./keyspaces.cform \
--parameter-overrides KeyspaceName=mvrpl_dev \
--capabilities CAPABILITY_IAM

Run bash to delete resource:

aws cloudformation delete-stack --stack-name MyKeyspacesStack

Run spark-shell 3.5.x to populate data on keyspaces table:

Use this file as application.conf

spark-shell \
--packages "software.aws.mcs:aws-sigv4-auth-cassandra-java-driver-plugin:4.0.9,com.datastax.spark:spark-cassandra-connector_2.12:3.5.1" \
--files "application.conf" \
--conf "spark.cassandra.connection.config.profile.path=application.conf"

Create dataframe and upsert in keyspaces table:

import org.apache.spark.sql.types._
import org.apache.spark.sql.functions.uuid
import org.apache.spark.sql.Row

import java.sql.Date

var df = spark.createDataFrame(spark.sparkContext.parallelize(Seq(
    Row(Date.valueOf("2025-08-02"): Date, "[email protected]": String, "User A": String),
    Row(Date.valueOf("2023-02-22"): Date, "[email protected]": String, "User B": String),
    Row(Date.valueOf("1989-11-12"): Date, "[email protected]": String, "User C": String),
    Row(Date.valueOf("2020-04-18"): Date, "[email protected]": String, "User D": String),
    Row(Date.valueOf("2025-02-18"): Date, "[email protected]": String, "User E": String),
  ), 5),
  new StructType().add("criado_em", DateType, true)
    .add("email", StringType, true)
    .add("nome", StringType, true)
)

df = df.withColumn("id", uuid()) // Generate random user ID

(df.write
.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> "pessoas", "keyspace" -> "mvrpl_dev"))
.mode("append")
.save())

Run spring application e make this request:

curl --location 'http://localhost:8080/users'

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages