我有以下案例类
case class Station(id: Long, name: String) extends Node
Run Code Online (Sandbox Code Playgroud)
和一个站的 Spark 数据集
vertices: org.apache.spark.sql.Dataset[Station] = [id: bigint, name: string]
Run Code Online (Sandbox Code Playgroud)
我想将顶点数据集转换为 Seq[Station]。我找到了很多关于如何从序列创建数据集的教程,反之亦然。你对我有什么暗示吗?
我有一个格式为的 Spark 数据集 -
+--------------+--------+-----+
|name |type |cost |
+--------------+--------+-----+
|AAAAAAAAAAAAAA|XXXXX |0.24|
|AAAAAAAAAAAAAA|YYYYY |1.14|
|BBBBBBBBBBBBBB|XXXXX |0.78|
|BBBBBBBBBBBBBB|YYYYY |2.67|
|BBBBBBBBBBBBBB|ZZZZZ |0.15|
|CCCCCCCCCCCCCC|XXXXX |1.86|
|CCCCCCCCCCCCCC|YYYYY |1.50|
|CCCCCCCCCCCCCC|ZZZZZ |1.00|
+--------------+--------+----+
Run Code Online (Sandbox Code Playgroud)
我想将其转换为类型的对象 -
public class CostPerName {
private String name;
private Map<String, Double> costTypeMap;
}
Run Code Online (Sandbox Code Playgroud)
我想要的是,
+--------------+-----------------------------------------------+
|name | typeCost. |
+--------------+-----------------------------------------------+
|AAAAAAAAAAAAAA|(XXXXX, 0.24), (YYYYY, 1.14) |
|BBBBBBBBBBBBBB|(XXXXX, 0.78), (YYYYY, 2.67), (ZZZZZ, 0.15) |
|CCCCCCCCCCCCCC|(XXXXX, 1.86), (YYYYY, 1.50), (ZZZZZ, 1.00) |
+--------------+-----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
即,对于每个name,我想要一张 的地图(type, cost)。
实现这一转变的有效途径是什么?我可以使用一些数据帧转换吗?我尝试了 groupBy 但只有在执行 sum、avg 等聚合查询时才有效。
我正在关注http://spark.apache.org/docs/latest/sql-programming-guide.html
输入后:
val df = spark.read.json("examples/src/main/resources/people.json")
// Displays the content of the DataFrame to stdout
df.show()
// +----+-------+
// | age| name|
// +----+-------+
// |null|Michael|
// | 30| Andy|
// | 19| Justin|
// +----+-------+
Run Code Online (Sandbox Code Playgroud)
我有一些问题没有看到答案。
首先,什么是 $ 符号?如在
df.select($"name", $"age" + 1).show()
Run Code Online (Sandbox Code Playgroud)
其次,我可以只从第二行获取数据吗(而且我不知道第二行的数据是什么)。
第三,如何使用 Spark sql 读取彩色图像?
第四,我仍然不确定spark中的数据集和数据帧之间有什么区别。变量 df 是一个数据帧,那么我可以将“Michael”更改为整数 5 吗?我可以在数据集中做到这一点吗?
请帮助我理解在数据集上使用时传递给groupByKey的参数
scala> val data = spark.read.text("Sample.txt").as[String]
data: org.apache.spark.sql.Dataset[String] = [value: string]
scala> data.flatMap(_.split(" ")).groupByKey(l=>l).count.show
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,请帮助我理解groupByKey(l => l)中的(l => l)含义.
Dataset<Tweet> ds = sc.read().json("/path").as(Encoders.bean(Tweet.class));
Tweet class :-
long id
string user;
string text;
ds.printSchema();
Run Code Online (Sandbox Code Playgroud)
输出:-
root
|-- id: string (nullable = true)
|-- text: string (nullable = true)
|-- user: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)
json文件具有字符串类型的所有参数
我的问题是接受输入并将其编码为Tweet.class。模式中为id指定的数据类型为Long,但在打印模式时将其强制转换为String。
它是否为printscheme a / c提供了读取文件的方式或根据我们所做的编码(此处为Tweet.class)?
DataSet 比 dataframe 提供最佳性能。DataSet 提供编码器和类型安全,但 dataframe 仍在使用中,是否有任何特定场景仅在该场景中使用 dataframe,或者是否有任何函数在 dataframe 上工作而不在数据集中工作。