我有List<String>
数据 就像是:
[[dev, engg, 10000], [karthik, engg, 20000]..]
我知道此数据的架构。
name (String)
degree (String)
salary (Integer)
我试过了:
JavaRDD<String> data = new JavaSparkContext(sc).parallelize(datas);
DataFrame df = sqlContext.read().json(data);
df.printSchema();
df.show(false);
输出:
root
|-- _corrupt_record: string (nullable = true)
+-----------------------------+
|_corrupt_record |
+-----------------------------+
|[dev, engg, 10000] |
|[karthik, engg, 20000] |
+-----------------------------+
因为List<String>
不是正确的JSON。
我需要创建一个正确的JSON还是有其他方法可以做到这一点?
您可以从中创建DataFrame List<String>
,然后使用 selectExpr
和split
获取所需的DataFrame。
public class SparkSample{
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName("SparkSample").setMaster("local[*]");
JavaSparkContext jsc = new JavaSparkContext(conf);
SQLContext sqc = new SQLContext(jsc);
// sample data
List<String> data = new ArrayList<String>();
data.add("dev, engg, 10000");
data.add("karthik, engg, 20000");
// DataFrame
DataFrame df = sqc.createDataset(data, Encoders.STRING()).toDF();
df.printSchema();
df.show();
// Convert
DataFrame df1 = df.selectExpr("split(value, ',')[0] as name", "split(value, ',')[1] as degree","split(value, ',')[2] as salary");
df1.printSchema();
df1.show();
}
}
您将获得以下输出。
root
|-- value: string (nullable = true)
+--------------------+
| value|
+--------------------+
| dev, engg, 10000|
|karthik, engg, 20000|
+--------------------+
root
|-- name: string (nullable = true)
|-- degree: string (nullable = true)
|-- salary: string (nullable = true)
+-------+------+------+
| name|degree|salary|
+-------+------+------+
| dev| engg| 10000|
|karthik| engg| 20000|
+-------+------+------+
您提供的样本数据有空格。如果你想删除的空间,有工资类型为“整数”,那么你可以使用trim
和cast
功能如下图所示。
df1 = df1.select(trim(col("name")).as("name"),trim(col("degree")).as("degree"),trim(col("salary")).cast("integer").as("salary"));
问题内容: 我有一些像这样的数据框: A中值 的 可能范围仅为0到7 。 另外,我有一个8个元素的列表,如下所示: 如果A列中的元素是 n ,我需要将List中的第 n 个元素插入新列,例如’D’。 如何一口气做到这一点而又不遍历整个数据框? 产生的数据框如下所示: 注意:数据框很大,迭代是最后一个选项。但是如果需要的话,我也可以将其他数据结构(如dict)排列在“ List”中的元素上。 问题答
问题内容: 我正在考虑对每个具有大量列的数据帧进行合并操作。不想结果有两个具有相同名称的列。我正在尝试查看两个框架之间共有的列名列表: 我该如何在Index对象上操作该NumPy布尔数组,使其仅返回公用列的列表? 问题答案: 使用或: 后一种选择的替代语法:
问题内容: 我有两个看起来像这样的数据框: 现在,如果我利用pandas .isin函数,我可以做一些漂亮的事情 列和from存在于while中不 我的问题是:是否有人知道为df_2中但不存在于df_1中的列返回列标签的方法 像这样的东西 先感谢您! 问题答案: 熊猫索引对象具有类似集合的属性,因此您可以直接执行以下操作: 您还可以使用运算符来计算交集,并集和对称差: 过去存在差异的运算符,现已弃
问题内容: 我试图基于一个的数据创建“ n” 。我正在检查in的Integer值,并循环执行sql语句以创建与列中一样多的“ n” 。 这是我的代码: 我需要创建“ n”,但我不知道如何在循环之前声明类型并在for内填充。 现有数据类型: 新的数据类型: 问题答案: 您可以创建一个可变列表并填充它: 但是更好的方法(不使用可变数据结构)是将整数列表 映射 到DataFrames列表中:
问题内容: 查看新的spark数据框api,尚不清楚是否可以修改数据框列。 我怎么会去改变行的值列一个数据帧的? 在这将是 编辑:合并以下内容,您不能修改现有数据框,因为它是不可变的,但是您可以返回具有所需修改的新数据框。 如果您只想根据条件替换列中的值,例如: 如果要对列执行某些操作并创建一个添加到数据框的新列: 如果希望新列的名称与旧列的名称相同,则可以添加其他步骤: 问题答案: 虽然您不能这
我有一张地图,如下图所示,其中有一个键,值的类型为: 我想在之前的地图上再添加一个地图,这样就有一个键,它的值就是上面的地图。这是正确的数据结构吗?我们如何实现它? 我想要像下面这样的东西 如上所示,仅向映射引入了一个新键,其值为上一个映射。 所以它就像一张