如何将这一行转换为数据帧?
val oneRowDF = myDF.first // gives Array[Row]
Run Code Online (Sandbox Code Playgroud)
谢谢
我已经使用以下语法从 S3 加载了一个 excel 文件,但我想知道需要在此处设置的选项。
为什么必须设置以下所有选项以加载 excel 文件?这些选项都不是加载其他文件类型(如 csv、del、json、avro 等)所必需的。
val data = sqlContext.read.
format("com.crealytics.spark.excel").
option("location", s3path).
option("useHeader", "true").
option("treatEmptyValuesAsNulls", "true").
option("inferSchema","true").
option("addColorColumns", "true").
load(path)
Run Code Online (Sandbox Code Playgroud)
如果未设置上述任何选项(位置除外),我会收到以下错误:
sqlContext.read.format("com.crealytics.spark.excel").option("location", s3path).load(s3path)
Run Code Online (Sandbox Code Playgroud)
错误信息 :
Name: java.lang.IllegalArgumentException
Message: Parameter "useHeader" is missing in options.
StackTrace: at com.crealytics.spark.excel.DefaultSource.checkParameter(DefaultSource.scala:37)
at com.crealytics.spark.excel.DefaultSource.createRelation(DefaultSource.scala:19)
at com.crealytics.spark.excel.DefaultSource.createRelation(DefaultSource.scala:7)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:345)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:132)
at $anonfun$1.apply(<console>:47)
at $anonfun$1.apply(<console>:47)
at time(<console>:36)
Run Code Online (Sandbox Code Playgroud) 看到strifiedSampling上贴了很多问题,但都没有回答我的问题,所以问为“新帖”,希望能得到一些更新。
我注意到 spark API:sampleBy() 返回的结果存在差异,这对于小型数据帧没有太大意义,但对于大型数据帧(> 1000 行)更为明显
示例代码:
val inputRDD:RDD[(Any,Row)] =df.rdd.keyBy(x=> x.get(0))
val keyCount = inputRDD.countByKey()
val sampleFractions = keyCount.map(x => (x._1,{(?? x._2.toDouble*sampleSize)/(totalCount*100)})).toMap
val sampleDF = df.stat.sampleBy(cols(0),fractions = sampleFractions,seed = 11L)
Run Code Online (Sandbox Code Playgroud)
数据帧总数:200 键数:A:16 B:91 C:54 D:39
分数:地图(A -> 0.08,B -> 0.455,C -> 0.27,D -> 0.195)
我只得到 69 行作为 df.stat.sampleBy() 的输出,尽管我已经指定了预期的样本大小是 100,当然这被指定为激发 API 的分数。
谢谢
有没有办法在 Scala 中将数据帧作为可选的输入函数参数传递?前任:
def test(sampleDF: DataFrame = df.sqlContext.emptyDataFrame): DataFrame = {
}
df.test(sampleDF)
Run Code Online (Sandbox Code Playgroud)
虽然我在这里传递了一个有效的数据框,但它总是被分配给一个空的数据框,我该如何避免这种情况?
我试图在数据框中逐列读取不同的值并将它们存储在序列数组中
def getColumnDistinctValues(df: DataFrame, colNames:String): Unit = {
val cols: Array[String] = colNames.split(',')
cols.foreach(println) // print column names
var colDistValues: Array[Seq[Any]] = null
for (i <- 0 until cols.length) {
colDistValues(i) = df.select(cols(i)).distinct.map(x => x.get(0)).collect // read distinct values from each column
}
Run Code Online (Sandbox Code Playgroud)
对colDistValues(i)的赋值不起作用并且总是导致空指针异常,为每个列分配不同值的正确语法是什么?
问候
我必须根据特定条件更新地图中的键.值不会被修改.
我最终得到了这段代码,但看起来并不整齐,有没有更好的替代方法:
val newOpt = inOpt("type") match {
case "mydb" =>
inOpt map { case (key, value) => (
if (key.contains(XXXX)) {
key.replace("A", "B")
}
else if(...){..}
else {
key
}
, value)
}
}
Run Code Online (Sandbox Code Playgroud)
所有更新的密钥以及旧密钥和值都将在newOpt中.
问候