2015-05-21 12 views

Odpowiedz

4

Nie, CQL tak naprawdę nie ma sposobu na zdefiniowanie zmiennych, uruchomienie pętli i aktualizację/zapytanie na podstawie tych zmiennych.

Jako alternatywę zazwyczaj używam DataStax Python driver do prostych zadań/skryptów, takich jak ten. Oto fragment skryptu w języku Python, którego kiedyś użyłem, aby zapełnić kolory produktów z pliku CSV.

# connect to Cassandra 
auth_provider = PlainTextAuthProvider(username='username', password='currentHorseBatteryStaple') 
cluster = Cluster(['127.0.0.1'], auth_provider=auth_provider) 
session = cluster.connect('products') 

# prepare statements 
preparedUpdate = session.prepare(
    """ 
     UPDATE products.productsByItemID SET color=? WHERE itemid=? AND productid=?; 
    """ 
) 
# end prepare statements 

counter = 0 

# read csv file 
dataFile = csv.DictReader(csvfilename, delimiter=',') 
for csvRow in dataFile: 
    itemid = csvRow['itemid'] 
    color = csvRow['customcolor'] 
    productid = csvRow['productid'] 

    #update product color 
    session.execute(preparedUpdate,[color,itemid,productid]) 

    counter = counter + 1 

# close Cassandra connection 
session.cluster.shutdown() 
session.shutdown() 

print "updated %d colors" % (counter) 

Aby uzyskać więcej informacji, zapoznaj się z samouczkiem DataStax Getting Started with Apache Cassandra and Python.

0

Tak, można przekazać zmienną w następujący sposób:

import com.datastax.spark.connector.{SomeColumns, _} 

import org.apache.spark.{SparkConf, SparkContext} 

import com.datastax.spark.connector.cql.CassandraConnector 

import org.apache.spark.SparkConf 

import com.datastax.spark.connector 

import com.datastax.spark.connector._ 

import org.apache.spark.{Logging, SparkConf} 

import org.apache.spark.sql.DataFrame 

import org.apache.spark.sql.{Row, SQLContext, DataFrame} 

import org.apache.spark.sql.cassandra._ 

val myvar=1 

csc.setKeyspace("test_keyspace") 

val query="""select a.col1, c.col4, b.col2 from test_keyspace.table1 a inner join test_keyspace.table2 b on a.col1=b.col2 inner join test_keyspace.table3 c on b.col3=c.col4 where a.col1="""+myvar.toString 

val results=csc.sql(query) 

results.show() 
Powiązane problemy