如何将RDD(org.apache.spark.rdd.RDD[org.apache.spark.sql.Row])转换为Dataframe org.apache.spark.sql.DataFrame.我使用了将数据帧转换为rdd .rdd.处理完之后我想把它放回到数据帧中.我怎样才能做到这一点 ?
有没有人可以通过示例帮助我理解DataSet API和DataFrame API之间的区别?为什么需要在Spark中引入DataSet API?
如果我想创建一个StructType(即a DataFrame.schema)a case class,是否有办法在不创建的情况下创建DataFrame?我可以轻松地做到:
case class TestCase(id: Long)
val schema = Seq[TestCase]().toDF.schema
Run Code Online (Sandbox Code Playgroud)
但实际创建一个DataFrame我想要的只是模式似乎有点过分.
(如果你很好奇,问题背后的原因是我正在定义一个UserDefinedAggregateFunction,并且这样做会覆盖一些返回的方法,StructTypes并使用case类.)
SparkContext, JavaSparkContext, SQLContext和之间有什么区别SparkSession?SparkSession?转换或创建Context ?SparkSession吗?SQLContext,SparkContext和JavaSparkContext也SparkSession?parallelize在SparkContext和中有不同的行为JavaSparkContext.他们是如何表现的SparkSession?如何使用SparkSession?创建以下内容?
RDDJavaRDDJavaPairRDDDataset有没有一种方法可以将a JavaPairRDD转换为a Dataset或Dataseta JavaPairRDD?
遵循Spark MLlib指南, 我们可以读到Spark有两个机器学习库:
spark.mllib,建立在RDD之上.spark.ml,建立在Dataframes之上.根据 StackOverflow上的这个和这个问题,Dataframes比RDD更好(和更新),应尽可能使用.
问题是我想使用常见的机器学习算法(例如:Frequent Pattern Mining,Naive Bayes等)和spark.ml(对于数据帧)不提供此类方法,仅spark.mllib(对于RDD)提供此算法.
如果Dataframes比RDD更好并且推荐指南推荐使用spark.ml,为什么不能在该lib中实现常见的机器学习方法?
machine-learning apache-spark pyspark apache-spark-ml apache-spark-mllib
Dataset在Spark中进行分组时,有两种方法:groupBy和groupByKey[K].
groupBy返回RelationalGroupedDataset,同时groupByKey[K]返回KeyvalueGroupedDataset.
它们之间有什么区别?
在什么情况下我应该选择一个而不是另一个?
为什么我的问题是关于"Dataset vs DataFrame"的问题的副本?我不明白.这显然是完全不同的事情!我的问题非常具体而非通用.
我仍在努力了解最近推出的Spark数据集的全部功能.
是否有何时使用RDD以及何时使用数据集的最佳实践?
在他们的公告中, Databricks解释说,通过使用数据集,可以实现运行时和内存的惊人减少.仍然声称数据集被设计为"与现有的RDD API一起工作".
这只是向下兼容性的参考,还是有人宁愿在数据集上使用RDD?
考虑一下这里给出的代码,
https://spark.apache.org/docs/1.2.0/ml-guide.html
import org.apache.spark.ml.classification.LogisticRegression
val training = sparkContext.parallelize(Seq(
LabeledPoint(1.0, Vectors.dense(0.0, 1.1, 0.1)),
LabeledPoint(0.0, Vectors.dense(2.0, 1.0, -1.0)),
LabeledPoint(0.0, Vectors.dense(2.0, 1.3, 1.0)),
LabeledPoint(1.0, Vectors.dense(0.0, 1.2, -0.5))))
val lr = new LogisticRegression()
lr.setMaxIter(10).setRegParam(0.01)
val model1 = lr.fit(training)
Run Code Online (Sandbox Code Playgroud)
假设我们使用sqlContext.read()将"training"作为数据框读取,我们是否应该做类似的事情
val model1 = lr.fit(sparkContext.parallelize(training)) // or some variation of this
Run Code Online (Sandbox Code Playgroud)
或者,在传递dataFrame时,fit函数将自动处理并行计算/数据
问候,
我有一个火花数据框如下:
predictions.show(5)
+------+----+------+-----------+
| user|item|rating| prediction|
+------+----+------+-----------+
|379433| 31| 1| 0.08203495|
| 1834| 31| 1| 0.4854447|
|422635| 31| 1|0.017672742|
| 839| 31| 1| 0.39273006|
| 51444| 31| 1| 0.09795039|
+------+----+------+-----------+
only showing top 5 rows
Run Code Online (Sandbox Code Playgroud)
预测是预测的评级,评级是隐含评级(计数).
现在我想检查我的推荐算法的AUC.
我首先尝试了pyspark.ml.BinaryClassificationEvaluator,因为它直接在数据框上工作.
# getting the evaluationa metric
from pyspark.ml.evaluation import BinaryClassificationEvaluator
evaluator = BinaryClassificationEvaluator(rawPredictionCol="prediction")
print evaluator.evaluate(predictions)
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
---------------------------------------------------------------------------
IllegalArgumentException Traceback (most recent call last)
<ipython-input-65-c642ea9c2cf5> in <module>()
4
5 evaluator = BinaryClassificationEvaluator(rawPredictionCol="prediction")
----> 6 print evaluator.evaluate(predictions)
7
8 #print evaluator.evaluate(predictions, {evaluator.metricName: "areaUnderPR"})
/Users/i854319/spark/python/pyspark/ml/evaluation.py in …Run Code Online (Sandbox Code Playgroud) python apache-spark pyspark apache-spark-ml apache-spark-mllib
我一直在寻找任何链接、文档或文章来帮助我了解我们什么时候应该选择数据集而不是数据框,反之亦然?
我在互联网上找到的都是标题,when to use a Dataset但是当打开时,它们只是指定了 Dataframe 和 Dataset 之间的差异。有很多链接只是列出了场景名称的差异。
stackoverflow 上只有一个问题具有正确的标题,但即使在该答案中,databricks 文档链接也不起作用。
我正在寻找一些信息,可以帮助我从根本上理解我们何时选择数据集,或者在什么情况下数据集优于数据帧,反之亦然。如果没有答案,即使是可以帮助我理解的链接或文档也是值得赞赏的。