我使用 Java 操作 Spark 1.5。我需要将 ID/索引列附加到现有的 DataFrame,例如:
+---------+--------+
| surname| name|
+---------+--------+
| Green| Jake|
| Anderson| Thomas|
| Corleone| Michael|
| Marsh| Randy|
| Montana| Tony|
| Green| Julia|
|Brenneman| Eady|
| Durden| Tyler|
| Corleone| Vito|
| Madiro| Mat|
+---------+--------+
Run Code Online (Sandbox Code Playgroud)
我希望每一行都附加索引,索引范围在1 和表记录数量之间。索引顺序并不重要,任何行都必须只包含唯一的 ID/索引。可以通过转换为 RDD 并附加索引行并转换为具有修改的 StructType 的 DataFrame 来完成,但是,如果我理解正确的话,此操作会消耗大量资源用于转换等,并且必须有另一种方法。结果必须是这样的:
+---------+--------+---+
| surname| name| id|
+---------+--------+---+
| Green| Jake| 3|
| Anderson| Thomas| 5|
| Corleone| Michael| 2|
| Marsh| Randy| 10|
| Montana| Tony| 7|
| …Run Code Online (Sandbox Code Playgroud) 说如果我这样做,如下所示.
val rdd = sc.textFile("someFile.txt")
val rddWithLines = rdd.zipWithIndex
Run Code Online (Sandbox Code Playgroud)
zipWithIndex添加的索引是否与输入文件中的行号(当然第一行为0)相对应?或者在这种情况下订单是否破裂?
我知道Spark Sql与Hive几乎相同。
现在,我已经创建了一个表,并且在执行Spark sql查询以创建表索引时,它总是给我这个错误:
SQL语句中的错误:AnalysisException:输入索引不匹配”期望AS在创建索引语句中靠近')'
我正在使用的Spark sql查询是:
CREATE INDEX word_idx ON TABLE t (id)
Run Code Online (Sandbox Code Playgroud)
id的数据类型为bigint。在此之前,我还尝试在此表的“ word”列上创建表索引,它给了我同样的错误。
那么,是否有通过Spark sql查询创建索引的方法呢?
我有两个数据帧(Spark 2.2.0 和 Scala 2.11.8)。第一个 DataFramedf1有一列称为col1,第二个df2也有 1 列称为col2。两个 DataFrame 中的行数相等。
如何将这两列合并到一个新的 DataFrame 中?
我试过了join,但我认为应该有其他方法来做到这一点。
另外,我尝试应用withColumm,但它无法编译。
val result = df1.withColumn(col("col2"), df2.col1)
Run Code Online (Sandbox Code Playgroud)
更新:
例如:
df1 =
col1
1
2
3
df2 =
col2
4
5
6
result =
col1 col2
1 4
2 5
3 6
Run Code Online (Sandbox Code Playgroud) 如何使用 Scala 反转此 DataFrame。我看到了sort函数,但必须是特定的列,我只想反转它们
+---+--------+-----+
|id | name|note |
+---+--------+-----+
|1 | james |any |
|3 | marry |some |
|2 | john |some |
|5 | tom |any |
+---+--------+-----+
Run Code Online (Sandbox Code Playgroud)
到:
+---+--------+-----+
|id | name|note |
+---+--------+-----+
|5 | tom |any |
|2 | john |some |
|3 | marry |some |
|1 | james |any |
+---+--------+-----+
Run Code Online (Sandbox Code Playgroud)