任何人都可以纠正我对Spark坚持的理解.
如果我们在RDD上执行了cache(),则它的值仅缓存在最初计算RDD的那些节点上.含义,如果存在100个节点的集群,则在第一个和第二个节点的分区中计算RDD.如果我们缓存了这个RDD,那么Spark将仅在第一个或第二个工作节点中缓存它的值.因此,当此Spark应用程序尝试在后续阶段使用此RDD时,Spark驱动程序必须从第一个/第二个节点获取值.
我对么?
(要么)
是RDD值持久存储在驱动程序内存而不是节点上的东西吗?
我在Spark SQL,Scala中查看Spark DataFrame的窗口滑动功能.
我有一个数据框,列Col1,Col1,Col1,日期.
Col1 Col2 Col3 date volume new_col
201601 100.5
201602 120.6 100.5
201603 450.2 120.6
201604 200.7 450.2
201605 121.4 200.7`
Run Code Online (Sandbox Code Playgroud)
现在我想添加一个名为(new_col)的新列,其中一行向下滑动,如上所示.
我试过下面的选项来使用窗口功能.
val windSldBrdrxNrx_df = df.withColumn("Prev_brand_rx", lag("Prev_brand_rx",1))
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我如何做到这一点.
val df = sc.parallelize(Seq((1,"Emailab"), (2,"Phoneab"), (3, "Faxab"),(4,"Mail"),(5,"Other"),(6,"MSL12"),(7,"MSL"),(8,"HCP"),(9,"HCP12"))).toDF("c1","c2")
+---+-------+
| c1| c2|
+---+-------+
| 1|Emailab|
| 2|Phoneab|
| 3| Faxab|
| 4| Mail|
| 5| Other|
| 6| MSL12|
| 7| MSL|
| 8| HCP|
| 9| HCP12|
+---+-------+
Run Code Online (Sandbox Code Playgroud)
我想过滤出列'c2'的前三个字符"MSL"或"HCP"的记录.
所以输出应该如下所示.
+---+-------+
| c1| c2|
+---+-------+
| 1|Emailab|
| 2|Phoneab|
| 3| Faxab|
| 4| Mail|
| 5| Other|
+---+-------+
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮忙吗?
我知道df.filter($"c2".rlike("MSL"))- 这是为了选择记录,但如何排除记录.?
版本:Spark 1.6.2 Scala:2.10
val df = (Seq((1, "a", "10"),(1,"b", "12"),(1,"c", "13"),(2, "a", "14"),
(2,"c", "11"),(1,"b","12" ),(2, "c", "12"),(3,"r", "11")).
toDF("col1", "col2", "col3"))
Run Code Online (Sandbox Code Playgroud)
所以我有一个包含3列的火花数据帧.
我的要求实际上是我需要执行两个级别的groupby,如下所述.
Level1:如果我在col1上进行groupby并做一个Col3的总和.我将在两列以下.1. col1 2. sum(col3)我将在这里松开col2.
Level2:如果我想再次按col1和col2分组并做一个Col3的总和,我将得到3列以下.1. col1 2. col2 3. sum(col3)
我的要求实际上是我需要执行两个级别的groupBy并且在最后一个数据帧中具有这两个列(level1的sum(col3),level2的sum(col3)).
我怎么能这样做,谁能解释一下?
火花:1.6.2斯卡拉:2.10
任何人都可以解释将为Spark Dataframe创建的分区数量.
我知道对于RDD,在创建它时我们可以提到下面的分区数量.
val RDD1 = sc.textFile("path" , 6)
Run Code Online (Sandbox Code Playgroud)
但是对于Spark数据帧,在创建时看起来我们没有选择指定像RDD那样的分区数.
我认为只有在创建数据框架后我们可以使用重新分区API.
df.repartition(4)
Run Code Online (Sandbox Code Playgroud)
因此,如果我们可以在创建数据帧时指定分区数量,请告诉我们.
我有一个数据框,其列数约为400,我想根据我的要求删除100列.所以我创建了一个包含100个列名的Scala列表.然后我想迭代一个for循环来实际删除每个for循环迭代中的列.
下面是代码.
final val dropList: List[String] = List("Col1","Col2",...."Col100”)
def drpColsfunc(inputDF: DataFrame): DataFrame = {
for (i <- 0 to dropList.length - 1) {
val returnDF = inputDF.drop(dropList(i))
}
return returnDF
}
val test_df = drpColsfunc(input_dataframe)
test_df.show(5)
Run Code Online (Sandbox Code Playgroud) 我想了解在提交 Spark 应用程序时哪个节点将充当驱动程序节点,哪个节点将充当工作节点?
例如,如果我有 3 个节点的独立集群。
当spark第一个应用程序(app1)提交时,spark框架会随机选择一个节点作为驱动节点,其他节点作为工作节点。这仅适用于 app1。在执行过程中,如果提交了另一个spark应用程序(app2),spark可以随机选择一个节点作为驱动节点,其他节点作为工作节点。这仅适用于 app2。因此,当两个 spark 应用程序都在执行时,可能会出现两个不同的节点可以成为主节点的情况。如有误解请指正。
我有一个spark数据帧,我需要为特定列过滤空值和空格.
可以说dataframe有两列.col2既有空值也有空格.
col1 col2
1 abc
2 null
3 null
4
5 def
Run Code Online (Sandbox Code Playgroud)
我想应用过滤掉col2为空或空白的记录.任何人都可以帮忙解决这个问题.
版本:Spark1.6.2 Scala 2.10
您好,我在 Intelj IDE 中执行 Sparksql Job(读取 Oracle 表)时遇到以下问题。问题:
Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
我已经在 IntelliJIdea ProjectStructure==> 模块 ==> 依赖项 ==> + ==> 添加了 ojdbc7.jar 文件到我的项目中添加了 ojdbc7.jar 文件。
在 build.gradle 文件中我给出了以下声明。
“运行时文件('libs/ojdbc7.jar')”
编译项目后,我可以在项目中创建的 libs 文件夹中看到 jar 文件。
如果我在 IDE 中执行作业,我将面临这个问题。任何人都可以帮助我吗?
我想将 Spark Dataframe 的每一行转换为一个字符串,每列值之间有一个分隔符。
例如:我有一个输入数据框“df”,其中包含 3 列“firstname”、“lastname”、“age”,其中有两条记录,如下所示。
第 1 行:约翰·艾布拉汉姆 21 第 2 行:史蒂夫·奥斯汀 22
我想创建一个只有一列的新数据框,其中包含如下数据。
第一行:约翰$阿布拉汉姆$21 第二行:史蒂夫$奥斯汀$22
任何人都可以帮忙做这件事。