我想读取来自cassandra键空间和column_family的数据帧。当运行sparkR时,我调用相应的spark-cassandra-connector包,并将conf设置为我的本地spark cassandra主机。运行以下内容时,我没有收到任何错误。
Private Sub Update_Click()
Dim wb As Workbook, ur1 As Range, ur2 As Range, i As Long
Dim fr1 As Long, fr2 As Long, lr1 As Long, lr2 As Long, lc1 As Long, lc2 As Long
Application.ScreenUpdating = False
Set wb = Workbooks.Open("E:\mysourcefile.xlsm")
Set ur1 = Me.UsedRange
Set ur2 = wb.Worksheets("mysourcesheet").UsedRange
fr1 = ur1.Row: lr1 = fr1 + (ur1.Rows.Count - 1) - 1
fr2 = ur2.Row: lr2 = fr2 + (ur2.Rows.Count - 1) - 1
lc1 = ur1.Column + ur1.Columns.Count - 2: lc2 = ur2.Column + ur2.Columns.Count - 1
If Len(ur2.Cells(fr1 + 1, lc2)) > 0 Then 'customer not empty
If ur1.Cells(fr1 + 1, lc1) <> ur2.Cells(fr1 + 1, lc2) Then 'if last cutomer differ
With ur1
.Cells(fr1 + 0, lc1 + 2) = ur2.Cells(fr2 + 0, lc2)
.Cells(fr1 + 1, lc1 + 2) = ur2.Cells(fr2 + 1, lc2)
.Range(.Cells(fr1 + 0, lc1 + 2), .Cells(fr1 + 0, lc1 + 3)).MergeCells = True
.Range(.Cells(fr1 + 1, lc1 + 2), .Cells(fr1 + 1, lc1 + 3)).MergeCells = True
.Cells(fr1 + 2, lc1 + 2) = "Target"
.Cells(fr1 + 2, lc1 + 3) = "Actual"
.Cells(fr1 + 2, lc1 + 2).ColumnWidth = .Cells(fr1 + 2, lc1).ColumnWidth
.Cells(fr1 + 2, lc1 + 3).ColumnWidth = .Cells(fr1 + 2, lc1).ColumnWidth
.Range(.Cells(fr1, lc1 + 2), .Cells(fr1 + 2, lc1 + 3)).HorizontalAlignment = xlCenter
.Range(.Cells(fr1, lc1 + 2), .Cells(lr1 + 1, lc1 + 3)).Borders.Weight = xlThin
For i = fr1 + 3 To lr1 + 1
.Cells(i, lc1 + 2) = Now 'Target date
.Cells(i, lc1 + 3) = ur2.Cells(i - 1, lc2)
Next
End With
End If
End If
wb.Close False
Application.ScreenUpdating = True
End Sub
$ ./bin/sparkR --packages com.datastax.spark:spark-cassandra-connector_2.10:1.5.0-M2 --conf spark.cassandra.connection.host=127.0.0.1
我收到以下错误,
sc <- sparkR.init(master="local")
sqlContext <- sparkRSQL.init(sc)
people <-read.df(sqlContext,
source = "org.apache.spark.sql.cassandra",
keyspace = "keyspace_name", table = "table_name")
我是否必须将conf传递给Error in writeJobj(con, object) : invalid jobj 1
作业(sc),以及如何使用sparkR?
以下是我的spark和cassandra版本,
Spark:1.5.1 卡珊德拉:2.1.6 Cassandra Connector已更新为每个zero323建议使用1.5.0-M2
这是我的堆栈跟踪的要点。
https://gist.github.com/bhajer3/419561edcb0dc5db2f71
修改:
我能够从不包含任何Cassandra集合数据类型的表创建数据框, 例如Map,Set和List。但是,我需要数据的许多模式都包含这些集合数据类型。
因此,当读取来自Cassandra键空间和column_family的数据帧时,sparkR不支持cassandra集合数据类型。请参阅此处了解我的详细报告/测试程序。
答案 0 :(得分:1)
最初的问题:
一般来说,你必须匹配Spark,spark-cassandra-connector
和Cassandra版本。连接器版本应与主要的Spark版本匹配(Spark 1.5的连接器1.5,Spark 1.4的连接器1.4,等等)。
与Cassandra版本的兼容性稍微有些棘手但您可以在connector README.md中找到兼容版本的完整列表。
修改强>:
SparkR&lt; 1.6不支持收集包括数组或映射在内的复杂数据类型。它已由SPARK-10049解决。如果您构建Spark表单master,它将按预期工作。 1.6版本没有cassandra-connector
但1.5-M2似乎运行得很好,至少使用DataFrame API。
注意强>:
看起来连接器1.5-M2错误地将Date
密钥报告为Timestamps
所以请注意,如果您在数据库中使用这些密钥。