我正在使用以下方法将csv加载到数据帧:
sqlContext.read.format("com.databricks.spark.csv").option("header", "true").
option("delimiter", ",").load("file.csv")
Run Code Online (Sandbox Code Playgroud)
但我的输入文件包含第一行中的日期和第二行中的标题.例
20160612
id,name,age
1,abc,12
2,bcd,33
Run Code Online (Sandbox Code Playgroud)
在将csv转换为数据帧时,如何跳过第一行?
我正在将 Spark 与 Scala 一起使用,并希望将整行传递给 udf 并选择 udf 中的每个列名和列值。我怎样才能做到这一点?
我正在尝试以下 -
inputDataDF.withColumn("errorField", mapCategory(ruleForNullValidation) (col(_*)))
def mapCategory(categories: Map[String, Boolean]) = {
udf((input:Row) => //write a recursive function to check if each row is in categories if yes check for null if null then false, repeat this for all columns and then combine results)
})
Run Code Online (Sandbox Code Playgroud) 我正在学习 spark (scala),我正在创建一个带有派生列的数据框。我正在尝试找出最佳实践。
我的用例有 2 个派生列,它们查找另一个列的值 - 例如 -
if (col22 = "USD") then col1 = "US" elseif (col22 = "CDN" the col1 = "CA" else null)
Run Code Online (Sandbox Code Playgroud)
另一个用例是
if(col23 = "us" && col100 = "abc") then col2 = "10" else if (col23 = "us" && col100 = "bacd" && col99 is null then col2 = 11 else null)
Run Code Online (Sandbox Code Playgroud)
问题 - 我已经为上述计算编写了 UDF 函数。我想知道有没有更好的方法来做到这一点?写一个udf函数是最好的做法。我将在我的代码中只使用一次这些函数。
我的 Scala 代码 -
def udf1 = udf((col22: String){ (col22) match {
case col22 if (col22 == …Run Code Online (Sandbox Code Playgroud) 从一个数据框我想创建一个新的数据框,其中任何列中的至少一个值在spark 1.5/scala中为null或空白.
我正在尝试编写一个generalize函数来创建这个新的数据帧.我传递数据帧和列列表并创建记录.
谢谢
我有一个代码,从C#中的随机类生成随机字符串和数字.然后将其写入文本文件.我怎样才能提高性能?代码如下:
int i = 0;
Record[] rec = new Record[100000];
Class1 cl = new Class1();
Random random = new Random();
while (i < 100000)
{
rec[i].num1 = random.Next();
rec[i].num2 = random.Next();
rec[i].mult = rec[i].num1 * rec[i].num2;
rec[i].rel = true;
rec[i].name = cl.generateRandomString(1);
rec[i].var_set = cl.generateRandomString(2);
using (StreamWriter writer = new StreamWriter("important.txt", true))
{
writer.Write(rec[i].name);
writer.Write(" ");
writer.Write(rec[i].var_set);
writer.Write(" ");
writer.Write(rec[i].num1);
writer.Write(" ");
writer.Write(rec[i].num2);
writer.Write(" ");
writer.Write(rec[i].mult);
writer.Write(" ");
writer.WriteLine(rec[i].rel);
}
i++;
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建将字符串或 RDD 作为参数但返回数据帧的函数。
代码:
def udf1 (input: String) = {
val file = sc.textFile(input);
file.map(p => Person(
(p.substring(1, 15)),
p.substring(16, 20))).toDF()
}
def main() {
case class Person(id: String, name: String)
val df1 = udf1 ("hdfs:\\")
}
Run Code Online (Sandbox Code Playgroud)
但它总是返回rdd。有什么建议么?