我昨天刚开始使用DataFrame,到目前为止我真的很喜欢它.
我不明白一件事......(请参阅"以编程方式指定架构"下的示例:https://spark.apache.org/docs/latest/sql-programming-guide.html#programmatically-specifying-the -schema)
在这个例子中,数据帧被注册为一个表(我猜测是为了提供对SQL查询的访问......?)但是正在访问的完全相同的信息也可以由peopleDataFrame.select("name")来完成.
所以问题是..你想什么时候将数据帧注册为表而不是仅仅使用给定的数据帧函数?并且一种选择比另一种更有效吗?
我刚刚开始使用Cassandra,我正在尝试创建具有不同分区和群集密钥的表,以查看它们如何以不同方式查询.
我用表格的主键创建了一个表 - (a),b,c,其中a是分区键,b,c是聚类键.
查询时我注意到以下查询:
select * from tablename where b=val;
Run Code Online (Sandbox Code Playgroud)
结果是:
无法执行此查询,因为它可能涉及数据过滤,因此可能具有不可预测的性能.如果要在性能不可预测的情况下执行此查询,请使用ALLOW FILTERING
使用"ALLOW FILTERING"可以得到我想要的东西(尽管我听说它对性能有害).
但是当我运行以下查询时:
select * from tablename where c=val;
Run Code Online (Sandbox Code Playgroud)
它说:
PRIMARY KEY列"c"不能被限制(前一列"b"不受限制或非EQ关系)
并且根本没有"允许过滤"选项.
我的问题是 - 为什么所有的聚类键都不一样?与分区键"a"相邻的列b被赋予"允许过滤"选项,允许查询它,而查询列"c"似乎根本不可能(给定该表的布局方式).
允许过滤获取cassandra扫描所有SSTable并在分区键丢失时从中获取数据,那么为什么我们不能执行相同的列c?
我的 cassandra 集群中有 6 个节点,所有节点都已启动。我的键空间设置为:
replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true
Run Code Online (Sandbox Code Playgroud)
从这个 cas 集群中读取数据会出现错误:
java.io.IOException: Exception during execution of SELECT "colA", "colB", "colC", "colD" FROM "keyspacename"."tablename" WHERE token("colA") > ? AND token("colA") <= ? LIMIT 1 ALLOW FILTERING: Not enough replica available for query at consistency LOCAL_ONE (1 required but only 0 alive)
Run Code Online (Sandbox Code Playgroud)
我所有的节点的复制因子都是 1..那么是什么导致了这个问题呢?
我也可以 cqlsh 并在此表中执行“选择”和“插入”操作。
有人知道发生了什么事吗?
真的坚持这个...我所做的就是运行“sbt”进入交互模式,这样我就可以编译我的scala程序,然后我遇到了这个:
java.io.IOException: No space left on device
at java.io.FileOutputStream.close0(Native Method)
at java.io.FileOutputStream.close(FileOutputStream.java:362)
at java.io.FilterOutputStream.close(FilterOutputStream.java:160)
at java.io.FilterOutputStream.close(FilterOutputStream.java:160)
at scala.tools.nsc.backend.jvm.BytecodeWriters$ClassBytecodeWriter$class.writeClass(BytecodeWriters.scala:93)
at scala.tools.nsc.backend.jvm.GenASM$AsmPhase$$anon$4.writeClass(GenASM.scala:67)
at scala.tools.nsc.backend.jvm.GenASM$JBuilder.writeIfNotTooBig(GenASM.scala:459)
at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genClass(GenASM.scala:1413)
at scala.tools.nsc.backend.jvm.GenASM$AsmPhase.run(GenASM.scala:120)
at sbt.compiler.Eval$$anonfun$compile$1$1.apply$mcV$sp(Eval.scala:177)
at sbt.compiler.Eval$$anonfun$compile$1$1.apply(Eval.scala:177)
at sbt.compiler.Eval$$anonfun$compile$1$1.apply(Eval.scala:177)
at scala.reflect.internal.SymbolTable.atPhase(SymbolTable.scala:207)
at sbt.compiler.Eval.compile$1(Eval.scala:177)
at sbt.compiler.Eval.compileAndLoad(Eval.scala:182)
at sbt.compiler.Eval.evalCommon(Eval.scala:152)
at sbt.compiler.Eval.eval(Eval.scala:96)
at sbt.EvaluateConfigurations$.evaluateDslEntry(EvaluateConfigurations.scala:177)
at sbt.EvaluateConfigurations$$anonfun$9.apply(EvaluateConfigurations.scala:117)
at sbt.EvaluateConfigurations$$anonfun$9.apply(EvaluateConfigurations.scala:115)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at sbt.EvaluateConfigurations$.evaluateSbtFile(EvaluateConfigurations.scala:115)
at sbt.Load$.sbt$Load$$loadSettingsFile$1(Load.scala:710)
at sbt.Load$$anonfun$sbt$Load$$memoLoadSettingsFile$1$1.apply(Load.scala:715)
at sbt.Load$$anonfun$sbt$Load$$memoLoadSettingsFile$1$1.apply(Load.scala:714)
at scala.Option.getOrElse(Option.scala:120)
at sbt.Load$.sbt$Load$$memoLoadSettingsFile$1(Load.scala:714)
...
Run Code Online (Sandbox Code Playgroud)
其次是:
[error] java.io.IOException: No space left on device
[error] …Run Code Online (Sandbox Code Playgroud) 是否有命令或任何方式知道什么数据存储在Cassandra的哪些节点上?
我对Cassandra很新,并且没有太多运气在谷歌搜索这个问题.
谢谢!
当我遇到这个错误时,我试图在cassandra中插入值:
15/08/14 10:21:54 INFO Cluster: New Cassandra host /a.b.c.d:9042 added
15/08/14 10:21:54 INFO Cluster: New Cassandra host /127.0.0.1:9042 added
INFO CassandraConnector: Connected to Cassandra cluster: Test Cluster
15/08/14 10:21:54 ERROR Session: Error creating pool to /127.0.0.1:9042
com.datastax.driver.core.TransportException: [/127.0.0.1:9042] Cannot connect
at com.datastax.driver.core.Connection.<init>(Connection.java:109)
at com.datastax.driver.core.PooledConnection.<init>(PooledConnection.java:32)
at com.datastax.driver.core.Connection$Factory.open(Connection.java:586)
at com.datastax.driver.core.SingleConnectionPool.<init>(SingleConnectionPool.java:76)
at com.datastax.driver.core.HostConnectionPool.newInstance(HostConnectionPool.java:35)
at com.datastax.driver.core.SessionManager.replacePool(SessionManager.java:271)
at com.datastax.driver.core.SessionManager.access$400(SessionManager.java:40)
at com.datastax.driver.core.SessionManager$3.call(SessionManager.java:308)
at com.datastax.driver.core.SessionManager$3.call(SessionManager.java:300)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.net.ConnectException: Connection refused: /127.0.0.1:9042
Run Code Online (Sandbox Code Playgroud)
我的复制因子是1.在Cass集群中有5个节点(它们都已启动).rpc_address:0.0.0.0,broadcast_rpc_address:127.0.0.1
我认为我应该从上面看到5个节点中的5个"INFO Cluster:New Cassandra host ..". …
我正在尝试运行“runsbt”,以便可以编译/打包我的 Spark 应用程序,但它会导致以下错误:
$ /home/blah/blah/scripts/runsbt
/home/blah/blah/scripts
java.io.FileNotFoundException: /home17/blah/target/config-classes/$6d7552488da5a7237b89.cache (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
我检查了提到的位置,没有像错误状态那样存在 $6d7552488da5a7237b89.cache,但如何解决此错误?
我没有删除该文件,甚至不知道这个位置。
我对 scala/spark 还很陌生......
任何帮助将非常感激!
cassandra ×4
apache-spark ×2
sbt ×2
scala ×2
cql ×1
dataframe ×1
ioexception ×1
java ×1
primary-key ×1