有人设法在 Windows 上使用 Spark 的DataFrame编写文件(尤其是 CSV)吗?
由于自 2.0 版以来Sparks 编写 .CSV 的本机功能(和统一方法),许多关于 SO 的答案已经过时(例如这个)write()。此外,我下载并添加winutils.exe了此处建议的内容。
代码:
// reading works just fine
val df = spark.read
.option("header", true)
.option("inferSchema", true)
.csv("file:///C:/tmp/in.csv")
// writing fails, none of these work
df.write.csv("file:///C:/tmp/out.csv")
df.write.csv("C:/tmp/out.csv")
Run Code Online (Sandbox Code Playgroud)
错误:
Exception in thread "main" org.apache.spark.SparkException: Job aborted.
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1.apply$mcV$sp(InsertIntoHadoopFsRelationCommand.scala:149)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1.apply(InsertIntoHadoopFsRelationCommand.scala:115)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1.apply(InsertIntoHadoopFsRelationCommand.scala:115)
at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:57)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.run(InsertIntoHadoopFsRelationCommand.scala:115)
at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:60)
at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:58)
at org.apache.spark.sql.execution.command.ExecutedCommandExec.doExecute(commands.scala:74)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:115)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:115)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$executeQuery$1.apply(SparkPlan.scala:136) …Run Code Online (Sandbox Code Playgroud) 由于VectorAssembler崩溃,如果传递的列具有除NumericTypeor 之外的任何其他类型BooleanType并且我正在处理许多TimestampType列,我想知道:
有一种简单的方法,一次投下多个列吗?
根据这个答案,我已经有了一个方便的方法来构建一个列:
def castColumnTo(df: DataFrame,
columnName: String,
targetType: DataType ) : DataFrame = {
df.withColumn( columnName, df(columnName).cast(targetType) )
}
Run Code Online (Sandbox Code Playgroud)
我想过castColumnTo递归调用,但我强烈怀疑这是(高效)的方式.
让我们说我有一个观点 MYVIEW
COL1[CARCHAR2] SORTINGCOL[NUMBER]
"itm1" 100
"itm2" 101
"itm3" 100
Run Code Online (Sandbox Code Playgroud)
我查询以下语句
SELECT *
FROM MYVIEW
ORDER BY SORTINGCOL;
Run Code Online (Sandbox Code Playgroud)
是否保证(=我可以依赖)返回的订单总是一样的吗?让我们说吧
item1 (值为100) item3 (值为100) item2 (值为101) 很明显,item2总是会最终成为最后的,但对于item1并item3用相同的SORTINGCOL价值呢?
假设我有一个包含如下名称的 Pandas DataFrame:
name_df = pd.DataFrame({'name':['Jack Fine','Kim Q. Danger','Jane Smith', 'Juan de la Cruz']})
name
0 Jack Fine
1 Kim Q. Danger
2 Jane Smith
3 Juan de la Cruz
Run Code Online (Sandbox Code Playgroud)
我想分裂name柱成first_name和last_name是否有在名称中有一个空格。否则,我希望将全名推入first_name.
所以最终的 DataFrame 应该是这样的:
first_name last_name
0 Jack Fine
1 Kim Q. Danger
2 Jane Smith
3 Juan de la Cruz
Run Code Online (Sandbox Code Playgroud)
我试图通过首先应用以下函数来返回可以拆分为名字和姓氏的名称来实现此目的:
def validate_single_space_name(name: str) -> str:
pattern = re.compile(r'^.*( ){1}.*$')
match_obj = re.match(pattern, name)
if match_obj:
return name
else:
return None …Run Code Online (Sandbox Code Playgroud) 为了能够在DataFrame不转义的情况下使用.我的列名,我需要一个函数来“验证”所有列名 - 但我尝试过的所有方法都没有及时完成这项工作(我在 5 分钟后中止)。
我正在尝试我的算法的数据集是 golub 数据集(在此处获取)。这是一个 2.2MB 的 CSV 文件,有 7200 列。重命名所有列应该是几秒钟的事情
读取CSV的代码
var dfGolub = spark.read
.option("header", "true")
.option("inferSchema", "true")
.csv("golub_merged.csv")
.drop("_c0") // drop the first column
.repartition(numOfCores)
Run Code Online (Sandbox Code Playgroud)
尝试重命名列:
def validifyColumnnames1(df : DataFrame) : DataFrame = {
import org.apache.spark.sql.functions.col
val cols = df.columns
val colsRenamed = cols.map(name => col(name).as(name.replaceAll("\\.","")))
df.select(colsRenamed : _*)
}
def validifyColumnnames2[T](df : Dataset[T]) : DataFrame = {
val newColumnNames = ArrayBuffer[String]()
for(oldCol <- df.columns) {
newColumnNames += …Run Code Online (Sandbox Code Playgroud) 我正在尝试将值写入单独的文件(将它们包含在我的 TeX 文件中)。但是我偶然发现的所有方法都在文件末尾插入了一个新行(这会导致出现不需要的空间)。该手册(例如?write)也没有提供任何有用的信息。
# 1st try
write(x = "1", file = "test")
# 2nd try
fileConn<-file("test")
writeLines(c("1"), fileConn)
close(fileConn)
Run Code Online (Sandbox Code Playgroud)
谢谢!任何想法?
我想我在Matlab中发现了一个错误.我唯一的解释是,matlab内部计算的值不是显示的值:
K>> calc(1,11)
ans =
4.000000000000000
K>> floor(ans)
ans =
3
Run Code Online (Sandbox Code Playgroud)
显示的代码是Matlab控制台的输出.calc(x,y)只是一个double值数组.
我想geom_abline在我的两个方面绘制两个不同的s。这似乎与geom_hline- 这是在此处回答的不同。
尽管
library(ggplot2)
dummy1 <- expand.grid(X = factor(c("A", "B")), Y = rnorm(10))
dummy1$D <- rnorm(nrow(dummy1))
dummy2 <- data.frame(X = c("A", "B"), Z = c(1, 0))
ggplot(dummy1, aes(x = D, y = Y)) + geom_point() + facet_grid(~X) +
geom_hline(data = dummy2, aes(yintercept = Z))
Run Code Online (Sandbox Code Playgroud)
..有效,这个:
library(ggplot2)
dummy1 <- expand.grid(X = factor(c("A", "B")), Y = rnorm(10))
dummy1$D <- rnorm(nrow(dummy1))
dummy2 <- data.frame(X = c("A", "B"), Z = c(1, 0))
ggplot(dummy1, aes(x = D, y = …Run Code Online (Sandbox Code Playgroud) 我有一个使用 Vue 3 和 Vuex 的项目。这是我第一次使用 Vue 3。我似乎不知道如何在 Vue 3 项目的 Setup 方法中访问 Vuex。
我有一个特征对象。这是由子组件使用 featureSelected 方法设置的。首先,在我的设置中,我使用 useStore 创建一个存储常量;从 import { useStore } from "vuex";。然后,在 featureSelected 函数内,我调用此存储对象上的调度函数store.dispatch("setPlot", { geometry: newFeature });。
我不断收到错误消息,告诉我存储对象上不存在调度函数:Uncaught TypeError: store.dispatch is not a function。
setup() {
const store = useStore;
const feature = ref();
const featureSelected = (newFeature) => {
feature.value = newFeature;
store.dispatch("setPlot", { geometry: newFeature });
};
return { feature, featureSelected };
},
Run Code Online (Sandbox Code Playgroud) 来自R世界我希望使用Scala Shell(./spark-shell)将.csv导入Spark(v.1.6.1 )
我的.csv有一个标题,看起来像
"col1","col2","col3"
1.4,"abc",91
1.3,"def",105
1.35,"gh1",104
Run Code Online (Sandbox Code Playgroud)
谢谢.