Apache spark 将列添加到Spark数据帧并计算其值

Apache spark 将列添加到Spark数据帧并计算其值,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个CSV文档正在加载到包含纬度和经度列的SQLContext中 val sqlContext=neworg.apache.spark.sql.sqlContext(sc); val df=sqlContext.read.format(“com.databricks.spark.csv”).option(“header”、“false”).option(“delimiter”、“t”).schema(customSchema).load(inputFile); CSV示例 metro_co

我有一个CSV文档正在加载到包含纬度和经度列的SQLContext中

val sqlContext=neworg.apache.spark.sql.sqlContext(sc);
val df=sqlContext.read.format(“com.databricks.spark.csv”).option(“header”、“false”).option(“delimiter”、“t”).schema(customSchema).load(inputFile);
CSV示例

metro_code, resolved_lat, resolved_lon
602, 40.7201, -73.2001

我试图找出添加一个新列并计算每一行的geox的最佳方法。使用geohex包很容易对lat和long进行散列。我想我需要运行parallelize方法,或者我已经看到一些示例将函数传递给withColumn。

用UDF包装所需函数应该可以:

import org.apache.spark.sql.functions.udf
导入org.geochex.geochex4j.geochex
val df=sc.并行化(序号(
(部分(602),40.7201,-73.2001),(无,5.7805139.5703)
)).toDF(“地铁代码”、“已解决”、“已解决”)
def geocode(级别:Int)=自定义项(
(lat:Double,long:Double)=>geochex.encode(lat,long,level))
df.withColumn(“code”,地理编码(9)($“resolved_lat”,“resolved_lon”)).show
// +----------+------------+------------+-----------+
//| metro|U代码| resolved|u lat | resolved|u lon |代码|
// +----------+------------+------------+-----------+
//| 602 | 40.7201 |-73.2001 | PF384076026|
//|空| 5.7805 | 139.5703 | PR081331784|
// +----------+------------+------------+-----------+

我无法通过此错误的可能重复
值$不是StringContext的成员
并且谷歌搜索不会返回任何内容。我必须在$上找到scala文档。这对我很有用。withColumn(“gh11”,geocode(11)(df(“resolved_lat”),df(“resolved_lon”))。show@jsponer@zero323我相信美元语法需要
导入sqlContext.implicits.StringToColumn
。您的代码段中没有可从中导入的sqlContext?对于
toDF
您需要,
sqlContext
,因此它隐含在那里:)关于
StringToColumn
$
方法,但它假设这只是一个类似
sc
的约定,对于
SparkContext
@zero323,谢谢!!