如何使用scala / spark正确迭代/打印镶木地板?

时间:2017-06-01 04:54:32

标签: scala apache-spark parquet

如何在spark / scala中打印包含嵌套对象数组的镶木地板的各个元素?

MapView rosterMapView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_roster);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_roster);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    rosterMapView = (MapView) findViewById(R.id.roster_map_view);
    rosterMapView.onCreate(savedInstanceState);
}

@Override
protected void onPause() {{
    super.onPause();
    rosterMapView.onPause();
}

具体来说,我希望能够遍历对象并打印出id,name和age ...然后路径中的每个项目。然后继续打印下一条记录并进行软化。假设我已经阅读了镶木地板文件并拥有数据框,我想做类似以下的事情(伪代码):

MapView

不确定以上是否是正确的方法,但它应该让你知道我想要做什么。

2 个答案:

答案 0 :(得分:1)

  val spark = SparkSession
    .builder()
    .master("local")
    .appName("ParquetAppendMode")
    .getOrCreate()

  import spark.implicits._


  val data1 = spark.read.json("/home/sakoirala/IdeaProjects/SparkSolutions/src/main/resources/explode.json")

  val result = data1.withColumn("path", explode($"path"))

  result.withColumn("x", result("path.x"))
  .withColumn("y", result("path.y")).show()

输出:

+---+----+-------+-----------+----+----+
|age|  id|   name|       path|   x|   y|
+---+----+-------+-----------+----+----+
| 25|1201| satish|  [1.0,1.0]| 1.0| 1.0|
| 25|1201| satish|  [2.0,2.0]| 2.0| 2.0|
| 28|1202|krishna|[1.23,2.12]|1.23|2.12|
| 28|1202|krishna|[1.23,2.12]|1.23|2.12|
+---+----+-------+-----------+----+----+

答案 1 :(得分:0)

您可以使用Dataframe API完全执行此操作;无需使用map

以下是通过投影您想要使用的字段轻松展平架构的方法:

val records = dataframe.select("id", "age", "path.x", "path.y")

然后,您可以使用show:

打印数据
records.show()