在Spark中将列附加到行

时间:2016-01-13 09:57:05

标签: apache-spark spark-dataframe

我有一个DataFrame,我希望通过一个新列进行扩展。 DateFrame解释了从Row创建新的Row

我目前的策略是使用Row中的DataFrame.javaRDD().map(...)构造新的Row来传递到Row调用的地图中,但我担心这可能会产生不必要的成本。

所以我想知道如果不是创建新的Row,我可以通过附加新字段来扩展现有的 #include <stdio.h> #include <sys/stat.h> #include <dirent.h> int main(int argc,char* argv[]) { if (argc<2) { printf("Wrong numer of arguments\n"); return 1; } int is_dir (char * filename) { struct stat buf; int ret = stat (filename, & buf); if (0 == ret) { if (buf.st_mode & S_IFDIR) { return 0; } else { return 1; } } return -1; } int delete_dir (char * dirname) { char chBuf [256]; DIR * dir = NULL; struct dirent * ptr; int ret = 0; dir = opendir (dirname); if (NULL == dir) { return -1; } while ((ptr = readdir (dir))!= NULL) { ret = strcmp (ptr-> d_name, "."); if (0 == ret) { continue; } ret = strcmp (ptr-> d_name, ".."); if (0 == ret) { continue; } snprintf (chBuf, 256, "%s /%s", dirname, ptr-> d_name); ret = is_dir (chBuf); if (0 == ret) { ret = delete_dir(chBuf); if (0!=ret) { return -1; } } else if (1 == ret) { ret = remove (chBuf); if (0!=ret) { return -1; } } } closedir (dir); ret = remove (dirname); if (0!= ret) { return -1; } return 0; } } datetimepicker = require('eonasdan-bootstrap-datetimepicker') 界面似乎不允许这样做。

here

1 个答案:

答案 0 :(得分:2)

正如@Sachin Janani在评论中提到的那样,你不能修改一行(它是不可变的),但你可以使用DataFrame - 函数将一列添加到withColumn 。例如,下面的代码将添加一列,其中包含在“text”列中找到的字符串的长度:

val stringLength = udf[Int, String](s => s.length)
val df2 = df1.withColumn("text_length", stringLength(df1("text")))

希望这有帮助。